Generare lista di numeri casuali unici che utilizzano VBA in Microsoft Excel
In questo articolo, creeremo una funzione personalizzata per generare un elenco di numeri univoci e casuali tra gli intervalli specificati.
In questo esempio, possiamo eseguire la macro facendo clic sul pulsante “Invia”.
Prima di eseguire la macro, dobbiamo inserire i valori per quattro parametri. Abbiamo fornito il valore limite inferiore nella cella C12, il limite superiore nella cella C13, il numero di casuali univoci richiesti nella cella C14 e l’indirizzo di destinazione in cui è richiesto l’output nella cella C15.
Spiegazione logica
Abbiamo creato la funzione personalizzata “UniqueRandomNumbers” per generare un elenco di numeri univoci e casuali. Questa funzione accetta il numero richiesto, il limite inferiore e il limite superiore come parametri di input.
Abbiamo creato la macro “TestUniqueRandomNumbers” per chiamare la funzione personalizzata “UniqueRandomNumbers”. Questa macro viene eseguita facendo clic sul pulsante “Invia”. Questa macro prende il valore di input dell’utente dall’intervallo C12 a C15.
Spiegazione del codice
i = CLng (Rnd () * (ULimit – LLimit) + LLimit)
La formula sopra viene utilizzata per creare il numero casuale tra il limite superiore e inferiore definito. La funzione Rnd () crea un numero casuale compreso tra 0 e 1.
Range (Selection, Selection.Offset (Counter – 1, 0)). Value = _ Application.Transpose (RandomNumberList)
Il codice sopra viene utilizzato per trasporre l’output dell’array e assegnare l’output alla destinazione specificata.
Segui sotto per il codice
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
Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook e Facebook.
Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]