Genereer een lijst met unieke willekeurige getallen met VBA in Microsoft Excel

Inhoudsopgave

In dit artikel zullen we een aangepaste functie maken om een ​​lijst met unieke en willekeurige getallen tussen de opgegeven bereiken te genereren.

In dit voorbeeld kunnen we de macro uitvoeren door op de knop "Verzenden" te klikken. Voordat we de macro uitvoeren, moeten we waarden invoeren voor vier parameters. We hebben de ondergrenswaarde in cel C12, de bovengrens in cel C13, het aantal unieke willekeurige getallen dat nodig is in cel C14 en het bestemmingsadres waar uitvoer vereist is in cel C15.

Logische uitleg

We hebben de aangepaste functie "UniqueRandomNumbers" gemaakt om een ​​lijst met unieke en willekeurige getallen te genereren. Deze functie neemt het vereiste aantal, ondergrens en bovengrens als invoerparameters.

We hebben de macro "TestUniqueRandomNumbers" gemaakt om de aangepaste functie "UniqueRandomNumbers" aan te roepen. Deze macro wordt uitgevoerd door op de knop "Verzenden" te klikken. Deze macro haalt de gebruikersinvoerwaarde uit het bereik C12 tot C15.

Code uitleg

i = CLng(Rnd() * (ULimit - LLimit) + LLimit)

Bovenstaande formule wordt gebruikt om het willekeurige getal tussen de gedefinieerde boven- en ondergrens te creëren. De functie Rnd() maakt een willekeurig getal tussen 0 en 1.

Bereik (selectie, selectie. Offset (teller - 1, 0)). Waarde = _

Application.Transpose (RandomNumberList)

Bovenstaande code wordt gebruikt om de uitvoer van de array te transponeren en de uitvoer toe te wijzen aan de opgegeven bestemming.

Volg hieronder voor de code:

 Optie Expliciete functie UniqueRandomNumbers(NumCount As Long, LLimit As Long, ULimit As Long) As Variant 'variabelen declareren Dim RandColl As Collection Dim i As Long Dim varTemp() As Long 'Validatiecontrole voor de door de gebruiker opgegeven waarde If NumCount ULimit Then UniqueRandomNumbers = "Opgegeven ondergrens is groter dan opgegeven bovengrens" Functie beëindigen beëindigen If If NumCount > (ULimit - LLimit + 1) Dan UniqueRandomNumbers = "Aantal vereist uniek willekeurig getal is groter dan maximum aantal unieke nummers dat kan bestaan ​​tussen lagere limit and upper limit" Exit Function End If 'Creating new object of collection Set RandColl = New Collection Randomize Do On Error Resume Next 'Berekenen van het willekeurige getal dat bestaat tussen de onder- en bovengrens i = CLng(Rnd() * (ULimit - LLimit) + LLimit) 'Invoegen van het unieke willekeurige getal in de verzameling RandColl.Add i, CStr(i) On Error GoTo 0 'Looping totdat verzameling items heeft die gelijk zijn aan numCount Loop Until RandColl.Count = Num Count ReDim varTemp(1 To NumCount) 'Waarde van de items in de verzameling toewijzen aan varTemp-array For i = 1 To NumCount varTemp(i) = RandColl(i) Next i UniqueRandomNumbers = varTemp Set RandColl = Nothing Wissen varTemp End Function Sub TestUniqueRandomNumbers () 'Declareer variabelen Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String 'Verkrijgen van de door de gebruiker ingevoerde waarden Counter = Range("C14").Value LowerLimit = Range("C12" ).Value UpperLimit = Range("C13").Value Address = Range("C15").Value 'Aanroepen van aangepaste functie UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers(Counter, LowerLimit, UpperLimit) 'Selecteren van het doelbereik (adres).Selecteer 'Toewijzen de waarde in de bestemming Range(Selection, Selection.Offset(Counter - 1, 0)).Value = _ Application.Transpose(RandomNumberList) End Sub 

Als je deze blog leuk vond, deel hem dan met je vrienden op Facebook. Ook kunt u ons volgen op Twitter en Facebook.

We horen graag van u, laat ons weten hoe we ons werk kunnen verbeteren en voor u kunnen verbeteren. Schrijf ons op de e-mailsite

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave