Skapa lista över unika slumpmässiga nummer med VBA i Microsoft Excel

Anonim

I den här artikeln kommer vi att skapa en anpassad funktion för att generera en lista med unika och slumpmässiga nummer mellan de angivna intervallerna.

I det här exemplet kan vi köra makrot genom att klicka på knappen "Skicka". Innan vi kör makrot måste vi mata in värden för fyra parametrar. Vi har tillgång till det nedre gränsvärdet i cell C12, övre gräns i cell C13, antal unika slumpmässiga som krävs i cell C14 och destinationsadress var utmatning krävs i cell C15.

Logisk förklaring

Vi har skapat "UniqueRandomNumbers" anpassade funktion för att generera lista med unika och slumpmässiga nummer. Denna funktion tar det erforderliga antalet, nedre gränsen och övre gränsen som inmatningsparametrar.

Vi har skapat "TestUniqueRandomNumbers" -makro för att kalla "UniqueRandomNumbers" anpassade funktion. Detta makro utförs genom att klicka på knappen "Skicka". Detta makro tar användarens inmatningsvärde från intervallet C12 till C15.

Kodförklaring

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

Ovanstående formel används för att skapa slumpmässigt tal mellan den definierade övre och nedre gränsen. Rnd () -funktionen skapar ett slumpmässigt tal mellan 0 och 1.

Område (urval, urval. Offset (räknare - 1, 0)). Värde = _

Application.Transpose (RandomNumberList)

Ovanstående kod används för att transponera matrisens utdata och tilldela utmatningen till den angivna destinationen.

Följ koden nedan

 Alternativ 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 given by the user If NumCount ULimit Then UniqueRandomNumbers = "Angiven nedre gräns är större än angiven övre gräns" Avsluta funktion Slut Om IfCount> (ULimit - LLimit + 1) Då UniqueRandomNumbers = "Antal erforderliga unika slumptal är större än maximalt antal unikt antal som kan finnas mellan lägre gräns och övre gräns "Avsluta funktion Slut om" Skapa nytt samlingsobjekt Ange RandColl = Ny samling Slumpmässigt Gör vid fel Återuppta nästa "Beräkning av slumpmässigt tal som finns mellan den nedre och övre gränsen i = CLng (Rnd () * (ULimit - LLimit) + LLimit) 'Infoga det unika slumpmässiga numret i samlingen RandColl.Add i, CStr (i) Vid fel Gå 0' Looping tills samlingen har objekt lika med numCount Loop Till RandColl.Count = Num Count ReDim varTemp (1 To NumCount) 'Tilldela värdet på objekten i samlingen till varTemp array För i = 1 till NumCount varTemp (i) = RandColl (i) Nästa i UniqueRandomNumbers = varTemp Set RandColl = Nothing Radera varTemp Slutfunktion Sub TestUniqueRandomNumbers () 'Declare variables Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String' Hämta värdena som skrivs in av användaren 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)' Välja destinationsintervall (adress) .Välj 'Tilldela värdet i destinationsintervallet (Selection, Selection.Offset (Counter - 1, 0)). Value = _ Application.Transpose (RandomNumberList) End Sub 

Om du gillade den här bloggen, dela den med dina vänner på Facebook. Du kan också följa oss på Twitter och Facebook.

Vi vill gärna höra från dig, låt oss veta hur vi kan förbättra vårt arbete och göra det bättre för dig. Skriv till oss på e -postwebbplatsen