Formulácia problému
Predpokladajme, že potrebujeme vytvoriť množinu celých náhodných čísel bez opakovaní v danom rozsahu hodnôt. Príklady na cestách:
- generovanie jedinečných náhodných kódov pre produkty alebo používateľov
- priraďovanie ľudí k úlohám (každý náhodne zo zoznamu)
- permutácia slov vo vyhľadávacom dopyte (ahoj seo-shnikam)
- hrať loto atď.
Metóda 1. Jednoduchá
Na začiatok zvážme jednoduchú možnosť: potrebujeme získať náhodnú množinu 10 celých čísel od 1 do 10. Pomocou funkcie zabudovanej v Exceli MEDZI PRÍPADOM (HRANA MEDZI) jedinečnosť nie je zaručená. Ak ho zadáte do bunky v hárku a skopírujete ho o 10 buniek, môže sa ľahko stať, že dôjde k opakovaniu:
Preto pôjdeme inou cestou.
Všetky verzie Excelu majú funkciu RANK (RANG), určený na zoraďovanie alebo inak povedané určenie vrchnej pozície čísla v sade. Najväčšie číslo v zozname má poradie=1, druhé na vrchu má poradie=2 atď.
Zadáme funkciu do bunky A2 SLCHIS (RAND) bez argumentov a skopírujte vzorec o 10 buniek. Táto funkcia nám vygeneruje množinu 10 náhodných zlomkových čísel od 0 do 1:
V ďalšom stĺpci predstavíme funkciu RANKna určenie pozície v rebríčku pre každé prijaté náhodné číslo:
V stĺpci B dostaneme to, čo sme chceli – ľubovoľný požadovaný počet neopakujúcich sa náhodných celých čísel od 1 do 10.
Čisto teoreticky môže nastať situácia, kedy SLCHIS nám dá dve rovnaké náhodné čísla v stĺpci A, ich poradie sa bude zhodovať a dostaneme opakovanie v stĺpci B. Pravdepodobnosť takéhoto scenára je však extrémne malá, vzhľadom na skutočnosť, že presnosť je na 15 desatinných miest.
Metóda 2. Zložitá
Táto metóda je o niečo zložitejšia, ale používa iba jeden vzorec poľa. Povedzme, že potrebujeme na hárku vytvoriť zoznam 9 neopakujúcich sa náhodných celých čísel v rozsahu od 1 do 50.
Do bunky A2 zadajte nasledujúci vzorec a kliknite na koniec Ctrl + Shift + Enter (ak ho chcete zadať ako vzorec poľa!) a skopírujte vzorec nadol na požadovaný počet buniek:
Metóda 3. Makro
A, samozrejme, problém môžete vyriešiť pomocou programovania vo Visual Basicu. V jednom zo starých článkov o náhodnom vzorkovaní som už citoval funkciu makra Lotto pole, ktorá produkuje požadovaný počet náhodných neopakujúcich sa čísel z daného intervalu.
- Ako spočítať počet jedinečných hodnôt v rozsahu
- Náhodný výber prvkov zo zoznamu