În acest articol, vom crea o funcție personalizată pentru a genera o listă de numere unice și aleatoare între intervalele specificate.
În acest exemplu, putem rula macro-ul făcând clic pe butonul „Trimiteți”. Înainte de a rula macrocomanda, trebuie să introducem valori pentru patru parametri. Am furnizat valoarea limită inferioară în celula C12, limita superioară în celula C13, numărul aleatoriu unic necesar în celula C14 și adresa de destinație în care au fost trimise este necesară în celula C15.
Explicație logică
Am creat funcția personalizată „UniqueRandomNumbers” pentru a genera lista de numere unice și aleatorii. Această funcție ia numărul necesar, limita inferioară și limita superioară ca parametri de intrare.
Am creat macro „TestUniqueRandomNumbers” pentru a apela funcția personalizată „UniqueRandomNumbers”. Această macrocomandă este executată făcând clic pe butonul „Trimiteți”. Această macrocomandă ia valoarea de intrare a utilizatorului din intervalul C12 până la C15.
Explicarea codului
i = CLng (Rnd () * (ULimit - LLimit) + LLimit)
Formula de mai sus este utilizată pentru a crea numărul aleatoriu între limita superioară și inferioară definită. Funcția Rnd () creează un număr aleatoriu între 0 și 1.
Range (Selection, Selection.Offset (Counter - 1, 0)). Value = _
Application.Transpose (RandomNumberList)
Codul de mai sus este utilizat pentru a transpune ieșirea matricei și a atribui ieșirea la destinația specificată.
Vă rugăm să urmați codul de mai jos
Opțiune Funcție explicită UniqueRandomNumbers (NumCount As Long, LLimit As Long, ULimit As Long) Ca variantă 'Variabile declarante Dim RandColl Ca colecție Dim i As Long Dim varTemp () As Long' Verificare validare pentru valoarea specificată de utilizator Dacă NumCount ULimit Apoi UniqueRandomNumbers = "Limita inferioară specificată este mai mare decât limita superioară specificată" Exit Function End If If NumCount> (ULimit - LLimit + 1) Then UniqueRandomNumbers = "Numărul de numere aleatoare unice necesare este mai mare decât numărul maxim de număr unic care poate exista între cel mai mic limită și limită superioară "Ieșire funcție Sfârșit Dacă 'Crearea unui nou obiect de colecție Set RandColl = Colecție nouă Randomize Do On Error Resume Next' Calculând numărul aleatoriu care există între limita inferioară și superioară i = CLng (Rnd () * (ULimit - LLimit) + LLimit) 'Introducerea numărului unic aleatoriu în colecția RandColl.Add i, CStr (i) On Error GoTo 0' Buclarea până la colecție are elemente egale cu numCount Buclă până la RandColl.Count = Num Count ReDim varTemp (1 To NumCount) 'Atribuirea valorii articolelor din colecție la matricea varTemp Pentru i = 1 To NumCount varTemp (i) = RandColl (i) Următorul i UniqueRandomNumbers = varTemp Set RandColl = Nimic Ștergere varTemp Funcția finală Sub TestUniqueRandomNumbers () „Declarați variabilele Dim RandomNumberList ca Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String” Obținerea valorilor introduse de utilizator Contor = Range ("C14"). Value LowerLimit = Range ("C12" ) .Value UpperLimit = Range ("C13"). Value Address = Range ("C15"). Value 'Apelarea funcției personalizate UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers (Counter, LowerLimit, UpperLimit)' Selectarea intervalului de destinație (Adresă). Selectați 'Asignare valoarea din domeniul de destinație (Selection, Selection.Offset (Counter - 1, 0)). Value = _ Application.Transpose (RandomNumberList) End Sub
Dacă ți-a plăcut acest blog, distribuie-l prietenilor tăi de pe Facebook. De asemenea, ne puteți urmări pe Twitter și Facebook.
Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți munca noastră și o putem îmbunătăți. Scrieți-ne pe site-ul de e-mail