Dans cet article, nous allons créer une fonction personnalisée pour générer une liste de nombres uniques et aléatoires entre les plages spécifiées.

Dans cet exemple, nous pouvons exécuter la macro en cliquant sur le bouton «Soumettre».

Avant d’exécuter la macro, nous devons saisir des valeurs pour quatre paramètres. Nous avons fourni la valeur limite inférieure dans la cellule C12, la limite supérieure dans la cellule C13, le nombre d’aléatoires uniques requis dans la cellule C14 et l’adresse de destination en sortie est requise dans la cellule C15.

ArrowMain

Explication logique

Nous avons créé la fonction personnalisée «UniqueRandomNumbers» pour générer une liste de nombres uniques et aléatoires. Cette fonction prend le nombre requis, la limite inférieure et la limite supérieure comme paramètres d’entrée.

Nous avons créé la macro «TestUniqueRandomNumbers» pour appeler la fonction personnalisée «UniqueRandomNumbers». Cette macro est exécutée en cliquant sur le bouton «Soumettre». Cette macro prend la valeur d’entrée utilisateur de la plage C12 à C15.

ArrowOutput

Explication du code

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

La formule ci-dessus est utilisée pour créer le nombre aléatoire entre la limite supérieure et inférieure définie. La fonction Rnd () crée un nombre aléatoire entre 0 et 1.

Range (Selection, Selection.Offset (Counter – 1, 0)). Value = _ Application.Transpose (RandomNumberList)

Le code ci-dessus est utilisé pour transposer la sortie du tableau et affecter la sortie à la destination spécifiée.

Veuillez suivre ci-dessous pour le code

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

Si vous avez aimé ce blog, partagez-le avec vos amis sur Facebook et Facebook.

Nous aimerions avoir de vos nouvelles, faites-nous savoir comment nous pouvons améliorer notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]