btamsgn > 19-02-24, 09:37 PM
bvchauthanh > 19-02-24, 10:38 PM
Dim Numbers(14) As Integer
Dim i As Integer
Dim temp As Integer
Dim j As Integer
For i = 0 To 14
Numbers(i) = i + 1
Next i
For i = 14 To 0 Step -1
j = Int((i + 1) * Rnd)
temp = Numbers(i)
Numbers(i) = Numbers(j)
Numbers(j) = temp
Next i
For i = 0 To 14
Debug.Print Numbers(i)
Next i
btamsgn > 20-02-24, 05:26 AM
(19-02-24, 10:38 PM)bvchauthanh Đã viết: bạn thử với đoạn mã sau và điều chỉnh lại cho phù hợp nhé
Mã PHP:Dim Numbers(14) As Integer
Dim i As Integer
Dim temp As Integer
Dim j As Integer
For i = 0 To 14
Numbers(i) = i + 1
Next i
For i = 14 To 0 Step -1
j = Int((i + 1) * Rnd)
temp = Numbers(i)
Numbers(i) = Numbers(j)
Numbers(j) = temp
Next i
For i = 0 To 14
Debug.Print Numbers(i)
Next i
ongke0711 > 20-02-24, 08:04 AM
btamsgn > 20-02-24, 10:38 AM
(20-02-24, 08:04 AM)ongke0711 Đã viết: Trên diễn đàn có sẳn mấy bài quay số may mắn, không lặp lại các số đã trúng rồi đó, bạn tìm kiếm và tham khảo đi.
ongke0711 > 20-02-24, 09:58 PM
(19-02-24, 09:37 PM)btamsgn Đã viết: Nhờ các ban chỉ giúp mình mã để tạo tạo số ngẫu nhiên từ 1 to 15, không trùng lặp và duy nhất
Option Explicit
Sub laySoNgauNhien(soketqua As Long, gioiHanSo As Long)
Dim soNgauNhien As Long, i As Long
Dim cacSoDaDung As Object 'New Dictionary'
If soketqua > gioiHanSo Then Exit Sub
Set cacSoDaDung = CreateObject("Scripting.Dictionary")
For i = 1 To soketqua
Do
soNgauNhien = Int((gioiHanSo * Rnd) + 1)
Loop While cacSoDaDung.Exists(soNgauNhien)
cacSoDaDung.Add soNgauNhien, soketqua
Debug.Print "So ngau nhien " & i & ": " & soNgauNhien
Next i
Set cacSoDaDung = Nothing
End Sub
Sub testRandom()
laySoNgauNhien 5, 15
End Sub
btamsgn > 20-02-24, 11:16 PM
(20-02-24, 09:58 PM)ongke0711 Đã viết:(19-02-24, 09:37 PM)btamsgn Đã viết: Nhờ các ban chỉ giúp mình mã để tạo tạo số ngẫu nhiên từ 1 to 15, không trùng lặp và duy nhất
Giải thuật này cũng đơn giản thôi.
- Chạy lấy số ngẫu nhiên.
- Lưu số vừa lấy vào một đối tượng nào đó chứa nó như: DAO Recordset, Array, Collection, Dictionnary.
- Tiếp tục chạy lấy số ngẫu nhiên và đối chiếu với danh sách lưu, nếu đã có rồi thì "Loop" chạy lấy số tiếp đến khi không trùng --> rồi lưu tiếp.
- Khi danh sách đã lưu đủ 15 số thì thoát vòng lặp.
- Xong.
Mã PHP:Option Explicit
Sub laySoNgauNhien(soketqua As Long, gioiHanSo As Long)
Dim soNgauNhien As Long, i As Long
Dim cacSoDaDung As Object 'New Dictionary'
If soketqua > gioiHanSo Then Exit Sub
Set cacSoDaDung = CreateObject("Scripting.Dictionary")
For i = 1 To soketqua
Do
soNgauNhien = Int((gioiHanSo * Rnd) + 1)
Loop While cacSoDaDung.Exists(soNgauNhien)
cacSoDaDung.Add soNgauNhien, soketqua
Debug.Print "So ngau nhien " & i & ": " & soNgauNhien
Next i
Set cacSoDaDung = Nothing
End Sub
Sub testRandom()
laySoNgauNhien 5, 15
End Sub
ongke0711 > 21-02-24, 03:25 PM
(20-02-24, 11:16 PM)btamsgn Đã viết: sau khi kiểm tra số vẫn bị trùng lặp
btamsgn > 21-02-24, 05:05 PM
ongke0711 > 21-02-24, 08:20 PM
(21-02-24, 05:05 PM)btamsgn Đã viết: Minh đính kèm file ban tham khảo
https://drive.google.com/file/d/1o5zp4xE...sp=sharing
sau khi kiểm tra bị lặp lại