Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » ostatni » generator-nahodnych-cisel-excel

Generátor náhodných čísel - Excel VBA

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

Požadavek na generátor náhodných čísel ve formuláři VBA.

Úvodem

Cílem článku je ukázat jak pomocí formuláře ve VBA vytvořit generátor náhodných čísel. Požadavek navíc byl, aby uživatel mohl zadat rozsah generovaných čísel (minimální a maximální) a počet, který se vyplní požadovaný počet náhodných čísel.

Ukázka

MS Excel 2010 - Úvodní obrazovka

Řešení

Vytvořit formulář s třemi TextBoxy a jedním tlačítkem (pro zpracování). Formulář může vypadat například takto:

MS Excel 2010 - Úvodní obrazovka

Doplníme příslušný kód:

PocetNahodnychCisel = TextBox3.Value For i = 1 To PocetNahodnychCisel HodnotaLow = TextBox1.Value HodnotaHigh = TextBox2.Value NahodneCislo = (HodnotaHigh - HodnotaLow) * Rnd() + HodnotaLow Worksheets("List1").Cells(i + 5, 1) = NahodneCislo Next i

A můžete zkoušet ...

Ke stažení

Soubor generátor náhodných čísel soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá makra.

Závěrem

Je možno doplnit o kontrolu zadávaných dat, graficky upravit formuláře a mnoho dalšího záleží na vašich napadech

Článek byl aktualizován: 19.09.2020 11:02

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák - autor webu

Pavel Lasák

Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


František

Přidáno: 14.12.13 19:08

Dobrý den, zkouším upravit tento generátor náhodných čísel tak, aby generoval pouze celá čísla v nastaveném rozmezí, ale nedaří se mi to. Stále generuje pouze čísla se 13 desetinnými místy :( Prosím poraďte mi, jak na to. Díky za podporu. Zdravím, František.

Bob

Přidáno: 24.02.14 04:04

to Frantisek: da se to resit pomoci: NahodneCislo = Int ((HodnotaHigh - HodnotaLow) * Rnd() + HodnotaLow) Problem je, ze to nebude rovnomerne rozlozene pro extrem HodnotaHigh... Sam se v tom vrtam, napada mne zmenit PomocnaHigh = HodnotaHigh + 1 a v pripade ze to vygeneruje nahodne cislo = PomocnaHigh mit kontrolu aby NahodneCislo <= HodnotaHigh (to co streli do PomocnaHigh zahodit a generovat jine...)

Pepa

Přidáno: 26.10.14 19:27

Dobrý den. Potřeboval bych tento generátor doplnit tak, aby generoval ve sloupci stejné zaokrouhlené číslo pouze např. 3x.

David

Přidáno: 18.12.14 14:20

to František: řešení je docela jednoduché, zkuste si nadefinovat všechny proměnné jako LONG a nevyhodí vám to číslo s desetinnou čárkou.

Jakub

Přidáno: 21.12.14 17:27

Dobrý den. Testoval jsem a hledal všude možně, ale nikde se o tom nezmiňují. Je možné při generování náhodného čísla některé vynechat? Tj. Potřebuji náh. číslo od 1 do 1000, ale nesmí se mi vygenerovat čísla od 200 do 400 a od 600 do 800. Vyřešil jsem to podmínkou, že při vygenerování nechtěného čísla se spustilo generování znovu, ale těch "hluchých" míst je tam více a jsou proměnná a z mé varianty se stal nepřehledný a velice dlouhý kód. Děkuji za radu.

Jakub

Přidáno: 27.12.14 08:15

A pokud existuje nějaké řešení, aby se z čísel od 1 do 100 vygenerovalo 10 čísel a to přesně 5 čísel mezi 1 a 50 a přesně 5 čísel mezi 51 a 100. Děkuji

Jojo

Přidáno: 05.01.15 10:00

To Jakub: -- (z 21.12.2014)Sub Test() 'Celé náhodné čísla z rozsahu 's vynechaním určitých čísiel 'od 1 do 1000 'bez 200 do 400 a 600 do 800 PocCisiel = 10 ' počet vygenerovaných náh.čísiel cisMin = 1 cisMax = 1000 For i = 1 To PocCisiel NahodneCislo = Int(cisMin + (cisMax - cisMin) * Rnd()) Select Case NahodneCislo Case 200 To 400, 600 To 800 ' vynechané čísla i = i - 1 Case Else Worksheets("List1").Cells(i, 1) = NahodneCislo End Select Next i End Sub

Jojo

Přidáno: 05.01.15 10:36

To Jakub: -- (z 27.12.2014)Sub Test() 'Celé náhodné čísla z rozsahu 'od 1 do 100 '5x číslo 1 až 50 + '5x číslo 51 až 100 PocCisiel = 10 ' počet vygenerovaných náh.čísiel cisMin = 1 cisMax = 100 poc1 = 1 poc2 = 1 For i = 1 To PocCisiel NahodneCislo = Int(cisMin + (cisMax - cisMin) * Rnd()) Select Case NahodneCislo Case 1 To 50 If poc1 <= 5 Then poc1 = poc1 + 1 Worksheets("List1").Cells(i, 1) = NahodneCislo Else i = i - 1 End If Case Else If poc2 <= 5 Then poc2 = poc2 + 1 Worksheets("List1").Cells(i, 1) = NahodneCislo Else i = i - 1 End If End Select Next i End Sub

Jakub

Přidáno: 05.01.15 16:58

To Jojo Teď když na to koukám, říkám si, že jsem na tak triviální způsob nepřišel. Ten druhý příklad není úplně přesně, jak jsem to myslel, ale asi jsem to špatně popsal, není ale už tak obtížné si to upravit. Ono to, do čeho jsem se pustil je samo o sobě docela komplikované a nenapadlo mě, že se to dá řešit i takhle jednoduše. Díky moc

Jakub

Přidáno: 26.01.15 09:58

Dobrý den, Mám ještě jeden "existenční" problém. Generátor náhodných čísel mi generuje po spuštění aplikace EXCEL vždy stejná čísla. Jedná se o hru KOSTKY, kdy generuji 6x čísla od 1 do 6. Na kostkách sice padají různá čísla, ale po spuštění aplikace vždy ve stejných kombinacích. 5 4 4 2 2 5 5 4 4 2 2 5 5 4 4 2 2 5 x 1 5 5 5 1 1 5 5 5 1 x x 1 5 5 5 x x x x x x x x x x x x x x x x x x x 3 6 5 3 6 6 3 6 5 3 6 6 3 6 5 3 6 6 1 x 6 3 x x 1 6 x 3 4 5 1 x x 6 x x ... Původně jsem použil příkaz: K1 = Int (( 6 - 1 + 1 ) * Rnd + 1 ) V domění, že je problém způsoben nízkým počtem proměnných, jsem kód rozšířil na: Cislo = Int((6001 - 1 + 1) * Rnd + 1) If Cislo > 0 And Cislo < 1001 Then K1 = 1 ElseIf Cislo > 1000 And Cislo < 2001 Then K1 = 2 ElseIf Cislo > 2000 And Cislo < 3001 Then K1 = 3 ElseIf Cislo > 3000 And Cislo < 4001 Then K1 = 4 ElseIf Cislo > 4000 And Cislo < 5001 Then K1 = 5 Else K1 = 6 End If Nicméně, problém je stále stejný a to jak na různých počítečích, tak různých verzích Excelu 2010 i 2013. Na odkazu je onen soubor pro ukázku, zda vám to bude dělat stejný problém. Prosím o radu, protože takto je ta HRA prakticky nepoužitelná. Při různých výběrech kostek se postupem času sice hodnoty mění, ale při opakování stejných výběrů, jsou i na 100 hodů stále stejné hodnoty. Mockrát děkuji https://www.dropbox.com/s/bmjpvv4i7xhh492/HRA.zip?dl=0

Jakub

Přidáno: 27.01.15 06:19

Trochu jsem experimentoval a zjistil, že program mám nejspíš správně. Pokud si napíšete VBA kód: Sub Nahodne_cislo() Dim K1, i i = 1 While i < 50 K1 = Int((6 - 1 + 1) * Rnd + 1) Range("List1!A" & i) = K1 i = i + 1 Wend End Sub uložíte sešit, zavřete, znovu otevřete a spustíte makro, tak vám to vždy vyhodí stejnou řadu: 5 4 4 2 2 5 1 5 5 5 -> 1 3 6 5 3 6 6 1 6 3 -> 4 5 1 4 3 2 4 4 2 2 -> 5 5 4 6 6 2 5 6 2 4 1 ... Nevíte někdo, jak tento problém vyřešit??? Pokud jde o můj názor, výše uvedený příkaz není generátor náhodných čísel... Děkuji za radu

Jojo

Přidáno: 29.01.15 10:56

To Jakub: -- Generátor náh.čísiel:Sub Nahodne_cislo() Dim K1, i i = 1 Randomize While i < 50 K1 = Int(6 * Rnd + 1) ' od 1 do 6 Range("List1!A" & i) = K1 i = i + 1 Wend End Sub

Janko1988

Přidáno: 10.06.15 10:32

Dobry den, upravil som si vase makro a generujem iba jedno cislo, povedzme losovanie, ale losujem 10x v rozsahu 1 - 50, ako osetrim to, aby mi cislo povedzme 15 nevybehlo dva krat.. rozmyslal som nad funkciou NOW ale neviem ako to tu zadat. dakujem






Excel


Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2025 |