Excel: Generovanie náhodného čísla pri otvorení zošita

Autor: Lubo Kužela | 7.10.2010 o 10:09 | (upravené 7.10.2010 o 10:59) Karma článku: 9,37 | Prečítané:  4493x

V tomto článku spojím dva problémy, s ktorými sa na mňa obraciate. Ten prvý je problém, že pri použití funkcie RND sa stale generuje to isté číslo. Druhý problém je, aby sa číslo generovalo automaticky, po otvorení zošita, respektíve, aby sa automaticky spustilo ľubovolné makro.

Ú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:

1.PNG

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í:

Automatické spúštanie makra

Funkcia NOW()

Funkcia SECOND()

Funkcia RND()



Páčil sa Vám tento článok? Pridajte si blogera medzi obľúbených a my Vám pošleme email keď napíše ďalší článok
Pridaj k obľúbeným

Hlavné správy

Kočnerovo sledovacie komando kontra sledoval niekto ďalší

Ľudia od Petra Tótha mali tajné tiene.

Stĺpček Jakuba Fila

Kto sledoval Kočnerovo komando? Bola to SIS?

Chýbajúce odpovede budú naznačovať, že nezlyhala len polícia.


Už ste čítali?