Tạo danh sách các số ngẫu nhiên duy nhất bằng VBA trong Microsoft Excel
Trong bài viết này, chúng tôi sẽ tạo một hàm tùy chỉnh để tạo danh sách các số duy nhất và ngẫu nhiên giữa các phạm vi được chỉ định.
Trong ví dụ này, chúng tôi có thể chạy macro bằng cách nhấp vào nút “Gửi”.
Trước khi chạy macro, chúng ta phải nhập các giá trị cho bốn tham số. Chúng tôi đã cung cấp giá trị giới hạn dưới trong ô C12, giới hạn trên trong ô C13, số lượng ngẫu nhiên duy nhất được yêu cầu trong ô C14 và địa chỉ đích được yêu cầu trong ô C15.
Giải thích logic
Chúng tôi đã tạo chức năng tùy chỉnh “UniqueRandomNumbers” để tạo danh sách các số duy nhất và ngẫu nhiên. Hàm này lấy số cần thiết, giới hạn dưới và giới hạn trên làm tham số đầu vào.
Chúng tôi đã tạo macro “TestUniqueRandomNumbers” để gọi hàm tùy chỉnh “UniqueRandomNumbers”. Macro này được thực thi bằng cách nhấp vào nút “Gửi”. Macro này nhận giá trị đầu vào của người dùng từ phạm vi C12 đến C15.
Giải thích mã
i = CLng (Rnd () * (ULimit – LLimit) + LLimit)
Công thức trên được sử dụng để tạo số ngẫu nhiên giữa giới hạn trên và giới hạn dưới đã xác định. Hàm Rnd () tạo một số ngẫu nhiên từ 0 đến 1.
Range (Selection, Selection.Offset (Counter – 1, 0)). Giá trị = _ Application.Transpose (RandomNumberList)
Đoạn mã trên được sử dụng để chuyển đầu ra của mảng và gán đầu ra cho đích được chỉ định.
Vui lòng theo dõi bên dưới để biết mã
Option Explicit Function UniqueRandomNumbers(NumCount As Long, LLimit As Long, ULimit As Long) As Variant 'Declaring variables Dim RandColl As Collection Dim i As Long Dim varTemp() As Long 'Validation check for the value specified by the user If NumCount < 1 Then UniqueRandomNumbers = "Number of unique random number required is less than 1" Exit Function End If If LLimit > ULimit Then UniqueRandomNumbers = "Specified lower limit is greater than specified upper limit" Exit Function End If If NumCount > (ULimit - LLimit + 1) Then UniqueRandomNumbers = "Number of required unique random number is greater than maximum number of unique number that can exists between lower limit and upper limit" Exit Function End If 'Creating new object of collection Set RandColl = New Collection Randomize Do On Error Resume Next 'Calculating the random number that exists between the lower and upper limit i = CLng(Rnd() * (ULimit - LLimit) + LLimit) 'Inserting the unique random number in the collection RandColl.Add i, CStr(i) On Error GoTo 0 'Looping until collection have items equal to numCount Loop Until RandColl.Count = NumCount ReDim varTemp(1 To NumCount) 'Assigning value of the items in the collection to varTemp array For i = 1 To NumCount varTemp(i) = RandColl(i) Next i UniqueRandomNumbers = varTemp Set RandColl = Nothing Erase varTemp End Function Sub TestUniqueRandomNumbers() 'Declare variables Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String 'Getting the values input by the user Counter = Range("C14").Value LowerLimit = Range("C12").Value UpperLimit = Range("C13").Value Address = Range("C15").Value 'Calling custom function UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers(Counter, LowerLimit, UpperLimit) 'Selecting the destination Range(Address).Select 'Assigning the value in the destination Range(Selection, Selection.Offset(Counter - 1, 0)).Value = _ Application.Transpose(RandomNumberList) End Sub
Nếu bạn thích blog này, hãy chia sẻ nó với bạn bè của bạn trên Facebook và Facebook.
Chúng tôi rất muốn nghe ý kiến từ bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi [email protected]