Generieren Liste mit eindeutigen Zufallszahlen mit VBA in Microsoft Excel
In diesem Artikel erstellen wir eine benutzerdefinierte Funktion, um eine Liste eindeutiger und zufälliger Zahlen zwischen den angegebenen Bereichen zu generieren.
In diesem Beispiel können wir das Makro ausführen, indem wir auf die Schaltfläche „Senden“ klicken.
Bevor wir das Makro ausführen, müssen wir Werte für vier Parameter eingeben. Wir haben den unteren Grenzwert in Zelle C12, die obere Grenze in Zelle C13, die Anzahl der in Zelle C14 erforderlichen eindeutigen Zufälle und die Zieladresse angegeben, an der die Ausgabe in Zelle C15 erforderlich ist.
Logische Erklärung
Wir haben die benutzerdefinierte Funktion „UniqueRandomNumbers“ erstellt, um eine Liste mit eindeutigen und zufälligen Zahlen zu erstellen. Diese Funktion verwendet die erforderliche Anzahl, Untergrenze und Obergrenze als Eingabeparameter.
Wir haben das Makro „TestUniqueRandomNumbers“ erstellt, um die benutzerdefinierte Funktion „UniqueRandomNumbers“ aufzurufen. Dieses Makro wird ausgeführt, indem Sie auf die Schaltfläche „Senden“ klicken. Dieses Makro nimmt den Benutzereingabewert aus dem Bereich C12 bis C15.
Code Erklärung
i = CLng (Rnd () * (ULimit – LLimit) + LLimit)
Die obige Formel wird verwendet, um die Zufallszahl zwischen der definierten oberen und unteren Grenze zu erstellen. Die Funktion Rnd () erstellt eine Zufallszahl zwischen 0 und 1.
Range (Selection, Selection.Offset (Counter – 1, 0)). Value = _ Application.Transpose (RandomNumberList)
Der obige Code wird verwendet, um die Ausgabe des Arrays zu transponieren und die Ausgabe dem angegebenen Ziel zuzuweisen.
Bitte folgen Sie unten für den Code
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
Wenn dir dieser Blog gefallen hat, teile ihn mit deinen Freunden auf Facebook und Facebook.
Wir würden gerne von Ihnen hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern und für Sie verbessern können. Schreiben Sie uns unter [email protected]