Genera un elenco di numeri casuali univoci utilizzando VBA in Microsoft Excel

Anonim

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 casualità univoche richieste 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.

Intervallo(Selezione, Selezione.Offset(Contatore - 1, 0)).Valore = _

Applicazione.Trasposizione(ListaNumeriCasuali)

Il codice precedente viene utilizzato per trasporre l'output dell'array e assegnare l'output alla destinazione specificata.

Si prega di seguire sotto per il codice

 Opzione Funzione esplicita UniqueRandomNumbers(NumCount As Long, LLimit As Long, ULimit As Long) As Variant 'Dichiarazione delle variabili Dim RandColl As Collection Dim i As Long Dim varTemp() As Long 'Verifica di convalida per il valore specificato dall'utente If NumCount ULimit Then UniqueRandomNumbers = "Il limite inferiore specificato è maggiore del limite superiore specificato" Exit Function End If If If NumCount > (ULimit - LLimit + 1) Then UniqueRandomNumbers = "Il numero di numeri casuali univoci richiesti è maggiore del numero massimo di numeri univoci che possono esistere tra limite e limite superiore" Exit Function End If 'Creazione di un nuovo oggetto della raccolta Set RandColl = New Collection Randomize Do On Error Resume Next 'Calcolo del numero casuale che esiste tra il limite inferiore e superiore i = CLng(Rnd() * (ULimit - LLimit) + LLimit) 'Inserimento del numero casuale univoco nella raccolta RandColl.Add i, CStr(i) On Error GoTo 0 'Ciclo fino a quando la raccolta ha elementi uguali a numCount Ciclo fino a RandColl.Count = Num Count ReDim varTemp(1 To NumCount) 'Assegnazione del valore degli elementi nella raccolta all'array varTemp For i = 1 To NumCount varTemp(i) = RandColl(i) Next i UniqueRandomNumbers = varTemp Set RandColl = Nothing Cancella varTemp End Function Sub TestUniqueRandomNumbers () 'Dichiara variabili Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String 'Ottenimento dei valori inseriti dall'utente Counter = Range("C14").Value LowerLimit = Range("C12" ).Value UpperLimit = Range("C13").Value Address = Range("C15").Value 'Chiamata della funzione personalizzata UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers(Counter, LowerLimit, UpperLimit) 'Selezione dell'intervallo di destinazione(Address).Select 'Assegnazione il valore nell'intervallo di destinazione(Selection, Selection.Offset(Counter - 1, 0)).Value = _ Application.Transpose(RandomNumberList) End Sub 

Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook. Inoltre, puoi seguirci su Twitter e Facebook.

Ci piacerebbe avere tue notizie, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici al sito di posta elettronica