Sukurkite unikalių atsitiktinių skaičių sąrašą naudodami „Microsoft Excel“ VBA

Turinys

Šiame straipsnyje sukursime pasirinktinę funkciją, kuri sugeneruos unikalių ir atsitiktinių skaičių sąrašą tarp nurodytų diapazonų.

Šiame pavyzdyje galime paleisti makrokomandą spustelėdami mygtuką „Pateikti“. Prieš paleisdami makrokomandą, turime įvesti keturių parametrų reikšmes. Turime pateikti apatinę ribinę vertę langelyje C12, viršutinę ribą langelyje C13, unikalų atsitiktinių skaičių, reikalingų langelyje C14, ir paskirties adresą, kurį reikia išvesti į langelį C15.

Loginis paaiškinimas

Mes sukūrėme „UniqueRandomNumbers“ pasirinktinę funkciją, kad sukurtume unikalių ir atsitiktinių skaičių sąrašą. Ši funkcija kaip įvesties parametrus naudoja reikiamą skaičių, apatinę ir viršutinę ribas.

Sukūrėme „TestUniqueRandomNumbers“ makrokomandą, kad iškviestume „UniqueRandomNumbers“ pasirinktinę funkciją. Ši makrokomanda vykdoma spustelėjus mygtuką „Pateikti“. Ši makrokomanda perima vartotojo įvesties vertę nuo diapazono C12 iki C15.

Kodo paaiškinimas

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

Aukščiau pateikta formulė naudojama atsitiktiniam skaičiui tarp apibrėžtos viršutinės ir apatinės ribos sukurti. Funkcija Rnd () sukuria atsitiktinį skaičių nuo 0 iki 1.

Diapazonas (pasirinkimas, pasirinkimas. Poslinkis (skaitiklis - 1, 0)). Vertė = _

Application.Transpose (RandomNumberList)

Viršuje esantis kodas naudojamas masyvo išėjimui perkelti ir išėjimui priskirti nurodytą paskirties vietą.

Sekite toliau pateiktą kodą

 Parinktis Aiškioji funkcija „UniqueRandomNumbers“ („NumCount As Long“, „LLimit As Long“, „ULimit Long“) kaip variantas „Deklaruojantys kintamieji Dim RandColl As Collection„ Dim i As Long Dim varTemp () As Long “Patvirtinimas patikrinkite vartotojo nurodytą reikšmę If NumCount ULimit then UniqueRandomNumbers = "Nurodyta apatinė riba yra didesnė nei nurodyta viršutinė riba" Išeikite iš funkcijos pabaigos Jei If NumCount> (ULimit - LLimit + 1) Tada UniqueRandomNumbers = "Reikalingas unikalus atsitiktinis skaičius yra didesnis nei didžiausias unikalių skaičių skaičius, kuris gali būti tarp apatinių riba ir viršutinė riba "Išeiti Funkcija Pabaigti, jei" Kuriant naują kolekcijos objektą Nustatykite RandColl = Nauja kolekcija Atsitiktinai Atlikite klaidą Tęsti toliau "Atsitiktinio skaičiaus, esančio tarp apatinės ir viršutinės ribos, apskaičiavimas i = CLng (Rnd () * (ULimit - LLimit) + LLimit) "Unikalaus atsitiktinio skaičiaus įterpimas į kolekciją RandColl. Pridėti i, CStr (i) On Error GoTo 0" Looping, kol kolekcija turi elementų, lygų numCount Loop Iki RandColl.Count = Num Skaičiuoti „ReDim varTemp (1 to NumCount)“ „Kolekcijos elementų vertės priskyrimas„ varTemp “masyvui„ i “=„ 1 “„ NumCount “ () 'Deklaruoti kintamuosius Dim RandomNumberList kaip Variant Dim Counter tiek ilgai, LowerLimit kaip ilgai, UpperLimit kaip Long Dim adresas kaip eilutė' Gaunamos vartotojo įvestos vertės Counter = Range ("C14"). Value LowerLimit = Range ("C12" ) .Value UpperLimit = Diapazonas ("C13"). Reikšmė Adresas = Diapazonas ("C15"). Reikšmė 'Skambinti pasirinktinei funkcijai UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers (Counter, LowerLimit, UpperLimit)' Paskirties diapazono (adreso) pasirinkimas. Pasirinkite 'Assigning paskirties diapazono reikšmė (Selection, Selection.Offset (Counter - 1, 0)). Value = _ Application.Transpose (RandomNumberList) End Sub 

Jei jums patiko šis tinklaraštis, pasidalykite juo su draugais „Facebook“. Be to, mus galite sekti „Twitter“ ir „Facebook“.

Mes norėtume išgirsti jūsų nuomonę, praneškite mums, kaip galime pagerinti savo darbą ir padaryti jį geresnį. Rašykite mums el

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave