Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Požadavek na generátor náhodných čísel ve formuláři VBA.
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.
Vytvořit formulář s třemi TextBoxy a jedním tlačítkem (pro zpracování). Formulář může vypadat například takto:
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 ...
Soubor
generátor náhodných čísel
ke stažení zdarma. Soubor využívá makra.
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
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.
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ů.
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.
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...)
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.
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.
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.
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
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
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
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
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
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
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
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
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
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 |