Tham khảo bài này nhé:điều kiện các giá trị trong ô không được lặp lại các bác ah
Function gpeSN()
Dim J As Long, W As Integer, VTr As Integer
Dim StrC As String: ReDim Arr(1 To 10, 1 To 5) As String
For W = 1 To 50 'Nôi Chuôi '
If W > 9 Then
StrC = StrC & CStr(W)
Else
StrC = StrC & "0" & CStr(W)
End If
Next W
For J = 1 To 99 ' Bam '
VTr = 9 + 13 * Rnd() \ 1
If VTr Mod 2 = 0 Then VTr = VTr + 1
StrC = Mid(StrC, VTr, 2) & Left(StrC, VTr - 1) & Mid(StrC, VTr + 2, Len(StrC))
Next J
For J = 1 To 10 ' Gán '
For W = 1 To 5
Arr(J, W) = Left(StrC, 2): StrC = Mid(StrC, 3, Len(StrC))
Next W
Next J
gpeSN = Arr()
End Function
Cái link trên có tất cả trên 100 bài.Tham khảo bài này nhé:
![]()
Tạo dãy số ngẫu nhiên không trùng
Trên diển đàn GPE đã có rất nhiều bài viết nói về vấn đề này! Tôi cũng đã tham khảo rất nhiều code ở các trang nước ngoài nhưng thấy rằng hầu hết đều viết rất khó hiểu và dài dòng! Trong 1 dịp tình cờ khi nghiên cứu về Dictionary Object, tôi nhận thấy rằng nó có khả năng làm được điều này mà...www.giaiphapexcel.com
Tui đố Bác Sa, Ba Tê, Leo Nguyễn viết bài này với.....1 vòng lặpBạn tham khảo hàm mảng tự tạo sau đây trong khi chờ các siêu công thức ra tay:
PHP:Function gpeSN() Dim J As Long, W As Integer, VTr As Integer Dim StrC As String: ReDim Arr(1 To 10, 1 To 5) As String For W = 1 To 50 'Nôi Chuôi ' If W > 9 Then StrC = StrC & CStr(W) Else StrC = StrC & "0" & CStr(W) End If Next W For J = 1 To 99 ' Bam ' VTr = 9 + 13 * Rnd() \ 1 If VTr Mod 2 = 0 Then VTr = VTr + 1 StrC = Mid(StrC, VTr, 2) & Left(StrC, VTr - 1) & Mid(StrC, VTr + 2, Len(StrC)) Next J For J = 1 To 10 ' Gán ' For W = 1 To 5 Arr(J, W) = Left(StrC, 2): StrC = Mid(StrC, 3, Len(StrC)) Next W Next J gpeSN = Arr() End Function
Cách xài:
B1: Dùng chuột tô chọn vùng liên tục gồm mươi hàng & 5 cột
B2: Bấm chuột lên thanh công thức & nhập cú pháp =gpeSN()
B3: Kết thúc bỡi tổ hợp phím dành cho hàm mảng
Chúc vui & thành công!
1) Hihi, tui đang đố các bạn nhậu ( có nêu từng nick rõ ràng) của tui chứ đâu dám đố bạn1 vòng lặp thì thua. Bạn post code lên đi
Code mình có thể dài hơn bạn 10 lần, nhưng chắc chắn phải chạy nhanh hơn code bạn 1000 lần
Tui đố Bác Sa, Ba Tê, Leo Nguyễn viết bài này với.....1 vòng lặp
Viết được, tuần sau ghé bác Sa tui mời người....3 lon Ken...lùn
Tui cũng thèm nhậu quá rồi
Híc
Cái này có thể coi là 1 vòng lặp được không bác.Tui đố Bác Sa, Ba Tê, Leo Nguyễn viết bài này với.....1 vòng lặp
Viết được, tuần sau ghé bác Sa tui mời người....3 lon Ken...lùn
Tui cũng thèm nhậu quá rồi
Híc
Sub vonglap()
Dim arr(1 To 50) As Boolean, a As Long, darr(1 To 5, 1 To 10), b As Long, c As Long, d As Long
a = 1
Do
c = Rnd() * 50
If c Then
If arr(c) = False Then
b = b + 1
d = d + 1
If b = 11 Then a = a + 1: b = 1
darr(a, b) = c
arr(c) = True
End If
End If
Loop Until d = 50
Range("A1:j5").Value = darr
End Sub
Ok, đúng là 1 vòngCái này có thể coi là 1 vòng lặp được không bác.
Mã:Sub vonglap() Dim arr(1 To 50) As Boolean, a As Long, darr(1 To 5, 1 To 10), b As Long, c As Long, d As Long a = 1 Do c = Rnd() * 50 If c Then If arr(c) = False Then b = b + 1 d = d + 1 If b = 11 Then a = a + 1: b = 1 darr(a, b) = c arr(c) = True End If End If Loop Until d = 50 Range("A1:j5").Value = darr End Sub
Sub BaLonKen()
Dim arr(1 To 50) As Long, darr(1 To 5, 1 To 10)
Dim a As Long, b As Long, c As Long, i As Long
Dim k As Long
a = 1
Randomize
For i = 1 To 50
k = 50 + 1 - i
c = Int(Rnd() * k) + 1
If arr(c) = 0 Then arr(c) = c
If arr(k) = 0 Then arr(k) = k
b = b + 1
If b = 11 Then a = a + 1: b = 1
darr(a, b) = arr(c)
arr(c) = arr(k)
Next i
Range("A1:j5").Value = darr
End Sub
For k = 50 to 1 Step -1For i = 1 To 50
k = 50 + 1 - i
darr( Int(d/10) + 1, d Mod 10 + 1) = c ' code tínhn dòng và cột của phần tử d+1 (d khởi đầu là 0)b = b + 1
d = d + 1
If b = 11 Then a = a + 1: b = 1
darr(a, b) = c
arr(c) = True