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.

ArrowMain

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.

ArrowOutput

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]