Excel VBA véletlenszerű számok
Ahhoz, hogy generál véletlen számokat VBA van egy beépített funkció nevű RND . A véletlenszámok előállításához csak egy argumentumra van szükség egy számra, és ez szintén opcionális paraméter. 0-nál nagyobb és 1-nél kisebb véletlenszerű számokat hoz létre.
Ez pontosan ugyanúgy működik, mint az „RAND” excel funkció. Amint azt a VBA „RAND” munkalapfüggvényében elmondtam, véletlenszerű számokat is létrehozhatunk, amelyek nagyobbak, mint 0, de kisebbek, mint 1.
Most nézze meg az „RND” függvény szintaxisát.
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function_2.png.webp)
(Szám): Három módon adhatjuk át az érvet.
- Ha a számot <0-ként adjuk meg, akkor minden alkalommal ugyanazt a véletlenszámot generálja.
- Ha a számot 0-ként adjuk meg, akkor megismétli a legutóbb megadott számot.
- Ha átadjuk a> 0 számot, akkor folyton különböző véletlenszerű számokat ad, azaz a következő véletlen számot a sorozatban.
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function.png.webp)
Hogyan lehet véletlen számokat előállítani a VBA kód használatával?
1. példa
Most látni fogjuk az „RND” függvény használatának egyszerű példáját. Kövesse az alábbi lépéseket a VBA kód önálló megírásához.
1. lépés: Nyújtsa be a változót „Integer” -ként a VBA-ban.
Kód:
Rnd_Példa1 () Dim K egész szám végként Sub
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function_3.png.webp)
2. lépés: Most az „ RND ” függvényen keresztül rendelje hozzá az értéket a „k” változóhoz .
Kód:
Sub Rnd_Példa1 () Dim K As egész szám = Rnd () End Sub
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function_4.png.webp)
3. lépés: Mutassa meg az üzenet mezőben a „k” változó által visszaadott értéket .
Kód:
Rnd_Példa1 () Dim K mint egész K = Rnd () MsgBox K Vége Sub
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function_5.png.webp)
Most futtassa az excel makrót, és nézze meg, mi az eredmény.
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function.gif)
Nézd, mi történt.
Az eredményt 1-ként mutatja, ahol az „RND” függvény csak nullánál nagyobb, de 1-nél kisebb számokat adhat vissza.
Biztos azon gondolkodik, hogy mi a baj itt.
Rossz dolog itt az a típusú adattípus, amelyet a „k” változóhoz rendeltünk.
Ha visszatekint az általunk deklarált változóra, az adattípust egész számnak rendeltük el. Mivel a változót egész számnak rendeltük, csak a -32768 és 32767 közötti egész számokat tudja megjeleníteni.
Amikor az RND visszaadja a tizedes számot, a VBA a tizedes számot a legközelebbi egész számra, azaz 1-re konvertálja.
Tehát a képlet megfelelő működéséhez deklaráljuk a változót „ Double ” -nek .
A „Double” a VBA adattípusa, amely tizedes értékeket képes tárolni.
Kód:
Sub Rnd_Példa1 () Dim K As Double K = Rnd () MsgBox K End Sub
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function_6.png.webp)
Most a kódot, és nézze meg, mi az eredmény.
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function_2.gif)
Kattintson az ok gombra, és futtasson még egyszer, és nézze meg, mi az eredmény.
![](https://cdn.know-base.net/9779307/generate_random_numbers_using_vba_rnd_function_7.png.webp)
Ezúttal más eredményt kaptunk. Mivel az „RND” volatilis funkció a természetben, a kód minden végrehajtásakor különböző eredményeket jelenít meg.
2. példa - Minden alkalommal ugyanazt a véletlenszerű számot kapja meg
Amint az előző e példában láthattuk, az „RND” függvény a kód minden végrehajtásakor reprodukálja az eredményt. Annak érdekében, hogy ugyanazt a véletlen számot kapjuk, újra és újra meg kell adnunk az argumentumot nullának.
Kód:
Sub Rnd_Példa2 () Dim K As Double K = Rnd (0) MsgBox K End Sub
Ez újra és újra elő fogja állítani ugyanazt a számot, amikor végrehajtjuk a kódot.
3. példa - Egész véletlenszerű szám generálása
Egész számokat is előállíthatunk más VBA függvények vagy más bemeneti számok használatával. Nézze meg például az alábbi kódot.
Kód:
Sub Rnd_Példa3 () Dim K As Double K = 1 + Rnd * 100 MsgBox K End Sub
Ez a kód véletlenszerű egész számokat generál tizedes pontokkal, minden alkalommal, amikor végrehajtjuk a kódot.
Ha az egész számokat tizedespontok nélkül nézi, akkor az alábbi kódot használhatjuk.
Kód:
Rnd_Példa3 () Dim K As Double K = CInt (1 + Rnd * 100) MsgBox K End Sub
Ez folyamatosan generálja az egész számokat 1-től 100-ig.