Cấp bậc tác giả:

DOTNET

Tạo dãy số ngẫu nhiên không trùng bằng VBA Excel

Được viết bởi webmaster ngày 02/03/2019 lúc 06:39 PM
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
  • 0
  • 11103

Tạo dãy số ngẫu nhiên không trùng bằng VBA Excel

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

Function UniqueRandomNum(Bottom As Long, Top As Long, Amount As Long)
  'Application.Volatile '<--- Neu muon gia tri thay doi khi bam F9
  On Error Resume Next
  If Amount > 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)

Ví dụ bài toán: ứng dụng trên để tạo phòng thi
- Có 146 sinh viên
- Tạo 5 phòng thi, mỗi phòng 30 sinh viên được lấy ngẫu nhiên từ dữ liệu gốc

Nguồn bài viết: Sưu tầm

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML