Lag en liste over unike tilfeldige tall ved hjelp av VBA i Microsoft Excel

Anonim

I denne artikkelen vil vi lage en tilpasset funksjon for å generere en liste med unike og tilfeldige tall mellom de angitte områdene.

I dette eksemplet kan vi kjøre makroen ved å klikke på "Send" -knappen. Før vi kjører makroen, må vi legge inn verdier for fire parametere. Vi har den nedre grenseverdien i celle C12, øvre grense i celle C13, antall unike tilfeldigheter som kreves i celle C14 og destinasjonsadressen hvor utgang er nødvendig i celle C15.

Logisk forklaring

Vi har opprettet “UniqueRandomNumbers” tilpasset funksjon for å generere liste over unike og tilfeldige tall. Denne funksjonen tar det nødvendige antallet, nedre grense og øvre grense som inngangsparametere.

Vi har laget "TestUniqueRandomNumbers" -makro for å kalle "UniqueRandomNumbers" tilpasset funksjon. Denne makroen utføres ved å klikke på "Send" -knappen. Denne makroen tar brukerens inndataverdi fra området C12 til C15.

Kode forklaring

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

Ovenstående formel brukes til å lage et tilfeldig tall mellom den definerte øvre og nedre grensen. Rnd () -funksjonen oppretter et tilfeldig tall mellom 0 og 1.

Område (utvalg, utvalg. Forskyvning (teller - 1, 0)). Verdi = _

Application.Transpose (RandomNumberList)

Koden ovenfor brukes til å transponere utdataene fra matrisen og tilordne utgangen til den angitte destinasjonen.

Følg koden nedenfor

 Alternativ Eksplisitt funksjon 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 specificed of the user If NumCount ULimit Then UniqueRandomNumbers = "Spesifisert nedre grense er større enn spesifisert øvre grense" Avslutt funksjon Slutt hvis Hvis NumCount> (ULimit - LLimit + 1) Da UniqueRandomNumbers = "Antall nødvendig unikt tilfeldig tall er større enn maksimalt antall unike tall som kan eksistere mellom lavere grense og øvre grense "Avslutt funksjon Slutt hvis" Opprette nytt samlingsobjekt Sett RandColl = Ny samling Tilfeldig Gjør ved feil Fortsett neste "Beregning av det tilfeldige tallet som eksisterer mellom den nedre og øvre grensen i = CLng (Rnd () * (ULimit - LLimit) + LLimit) 'Sette inn det unike tilfeldige tallet i samlingen RandColl.Add i, CStr (i) On Error GoTo 0' Looping inntil samlingen har elementer lik numCount Loop Before RandColl.Count = Num Count ReDim varTemp (1 To NumCount) 'Tilordne verdien av elementene i samlingen til varTemp array For i = 1 til NumCount varTemp (i) = RandColl (i) Neste i UniqueRandomNumbers = varTemp Sett RandColl = Ingenting Slett varTemp Sluttfunksjon Sub TestUniqueRandomNumbers () 'Declare variables Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String' Hent verdiene som er angitt av brukeren 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)' Velg destinasjonsområdet (adresse) .Velg 'Tilordne verdien i destinasjonsområdet (utvalg, utvalg.Offset (teller - 1, 0)). Verdi = _ Application.Transpose (RandomNumberList) End Sub 

Hvis du likte denne bloggen, del den med vennene dine på Facebook. Du kan også følge oss på Twitter og Facebook.

Vi vil gjerne høre fra deg, gi oss beskjed om hvordan vi kan forbedre arbeidet vårt og gjøre det bedre for deg. Skriv til oss på e -post