Úloha: Pri otvorení zošita sa v bunke A1 vygeneruje náhodné číslo v rozsahu od 1 do 10.
Riešenie: Túto úlohu som najprv riešil pomocou makra. Ale dá sa vyriešiť jednoducho pomocou funkcie RANDBETWEEN. Jednoducho do bunky A1 zadáme funkciu
=RANDBETWEEN(1;5)
, krorá nám bude generovať čísla od 1 do 5.
Keďže mojim cieľom bolo ukázať automatické spúšťanie makra a generovanie čísla v ňom, tu je postup aj pomocou makra (a tieť vygenerovanie náhodného čísla podľa vlastného algoritmu):
Postup s makrom:
1) Najprv vytvoríme procedúru pre udalosť Open. Na karte Vývojár (Developer) kliknite na tlačidlo Visual Basic. Otvorí sa vám editor kódu. Kliknite dvojklikom na objekt ThisWorkBook (Tento zošit) a pridajte tento kód:

2) Do tejto procedúry teraz pridáme kód na generovanie náhodného čísla. Ako som uviedol v staršom príklade, môžeme použiť funkciu RND.
Konkrétne by sme vložili tento riadok:
Range("A1") = (Int((10 * Rnd) + 1))
Vysvetlenie: Funkcia Rnd() vracia číslo od 0 do 1. Vynásobením 10 dostaneme číslo od 1 do 10. Funckia Int nám zabezpečí, že výsledné číslo bude celé.
Teda vzorec na generovanie čísla v nejakom rosahu použijeme:
Int(horne - dolne +1) * Rnd + dolne))
, kde horne je horné ohraničenie intervalu a dolne je spodné ohraničenie intervalu.
3) Tento vzorec nám generuje to isté číslo, pri každom spustení zošita. Náhodné čísla totiž nie sú v "skutočnosti náhodné". Sú generované postupnosťou čísiel, vypočítanej na základe nejakého algoritmu, alebo funkcie. Preto sa môžeme trochu pohrať, a vygenerovať si svoje "náhodé číslo".
Toto číslo môžeme generovať na základe hodnoty, ktorá sa mení. Najjednoduchšie je použiť čas.
Postup: Po otvorení zošita si zapamatáme čas, a použijeme jeho sekundy. Získame číslo od 0 do 60. Ak chceme číslo od 1 do 10, vydelíme toto číslo 6 a prevedieme ho na celé číslo.
Výsledkom bude číslo, ktoré sa používateľovi bude zdať ako náhodné, ale bude odvodené od času v sekundách, v ktorom používateľ otvoril zošit.
Tu je hotový kód:
Private Sub Workbook_Open()
Range("A1") = Int(Second(Now()) / 6)
End Sub
Vysvetlenie: Funkcia Now() nám vráti aktuálny dátum a čas. Funkcia Second() z tohto času vyberie sekundy, ktoré vydelíme číslom 6, a pomocou funkcie INT() prevedieme na celé číslo.
Samozrejme, možeme k sekundám pridať ľubovolné číslo, prípadne ho deliť, násobiť.. Fantázii sa medze nekladú;))
Linky s hlbším vysvetlením použitých funkcií: