7/10/19

Tạo dãy số ngẫu nhiên không trùng lắp

Tác giả: anhtuan1066 Diễn đàn: Giải pháp Excel 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 n... thumbnail 1 summary
Tác giả: anhtuan1066
Diễn đàn: Giải pháp Excel

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à code lại cực kỳ đơn giản

Thuật toán dựa vào định nghĩa của Dictionary có đoạn: Key là những phần tử duy nhất trong Keys

Tôi đã xây dựng code như sau:

Function UniqueRandomNum(Bottom As Long, Top As Long, Amount As Long)
'Application.Volatile '<--- amount="" bam="" doi="" error="" f9="" gia="" if="" khi="" muon="" neu="" next="" on="" resume="" thay="" tri=""> Top - Bottom + 1 Then Amount = Top - Bottom + 1
With CreateObject("Scripting.Dictionary")
Do
.Add Int(Rnd() * (Top - Bottom + 1)) + Bottom, ""
Loop Until .Count = Amount
UniqueRandomNum = WorksheetFunction.Transpose(.Keys)
End With
End Function

Cú pháp hàm
=UniqueRandomNum(Số nhỏ, Số lớn, bao nhiêu số cần tạo)

Giả sử các bạn muốn tạo ra 30 số ngẩu nhiên không trùng nằm trong khoảng từ 1 đến 100, các bạn làm như sau:
- Quét chọn 30 cell tùy ý theo chiều dọc, chẳng hạn là A1:A30
- Gõ vào thanh Formula công thức =UniqueRandomNum(1,100,30)
- Bấm tổ hợp phím Ctrl + Shift + Enter
Hãy thí nghiệm với đoạn Test sau:

Sub Test()
Range("A1:A30").Value = UniqueRandomNum(1, 100, 30)
End Sub
-------------
-
Ghi chú: Dictionary Object còn làm được nhiều thứ khác nữa, chẳng hạn có thể xây dựng hàm trích lọc các phần tử duy nhất (ngẫu nhiên và duy nhất đã làm được, đương nhiên duy nhất sẽ càng dể hơn)

DOWNLOAD 

ôi xin giả lập 1 file, dùng ứng dụng trên để tạo phòng thi
- Có 146 sinh viên
- Tạo 5 phòng thì, mỗi phòng 30 sinh viên được lấy ngẫu nhiên từ dử liệu gốc
DOWNLOAD ỨNG DỤNG CHIA PHÒNG THI
===================================================
Để trao đổi và hỏi đáp thêm về chủ đề này, vui lòng truy cập vào diễn đàn các bạn nhé https://thuthuataccess.com/forum/forum-21.html

Không có nhận xét nào

Đăng nhận xét