Générer la liste des numéros aléatoires uniques en utilisant VBA dans Microsoft Excel
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.
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.
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]