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.

ArrowMain

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.

ArrowOutput

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]