Sformułowanie problemu
Załóżmy, że musimy stworzyć zbiór liczb całkowitych losowych bez powtórzeń w zadanym zakresie wartości. Przykłady w podróży:
- generowanie unikalnych losowych kodów dla produktów lub użytkowników
- przydzielanie osób do zadań (każda losowo z listy)
- permutacja słów w zapytaniu (hello seo-shnikam)
- gra w lotto itp.
Metoda 1. Prosta
Na początek rozważmy prostą opcję: musimy uzyskać losowy zestaw 10 liczb całkowitych od 1 do 10. Korzystając z funkcji wbudowanej w Excela MIĘDZY SPRAWĄ (KRZEW MIĘDZY) unikatowość nie jest gwarantowana. Jeśli wprowadzisz go do komórki arkusza i skopiujesz 10 komórek, łatwo mogą się powtórzyć:
Dlatego pójdziemy w drugą stronę.
Wszystkie wersje programu Excel mają funkcję RANGA (ZAKRES), przeznaczony do rankingu, czyli określania najwyższej pozycji liczby w zestawie. Największa liczba na liście ma rangę=1, druga na górze ma rangę=2 i tak dalej.
Wprowadźmy funkcję w komórce A2 SLCHIS (SKRAJ) bez argumentów i skopiuj formułę w dół o 10 komórek. Ta funkcja wygeneruje nam zestaw 10 losowych liczb ułamkowych od 0 do 1:
W następnej kolumnie przedstawiamy funkcję RANGAustalenie pozycji w rankingu dla każdej otrzymanej liczby losowej:
W kolumnie B otrzymujemy to, co chcieliśmy – dowolną liczbę niepowtarzających się losowych liczb całkowitych od 1 do 10.
Czysto teoretycznie może dojść do sytuacji, gdy: SLCHIS da nam dwie identyczne liczby losowe w kolumnie A, ich rangi będą się zgadzać i otrzymamy powtórzenie w kolumnie B. Jednak prawdopodobieństwo takiego scenariusza jest niezwykle małe, biorąc pod uwagę fakt, że dokładność wynosi 15 miejsc po przecinku.
Metoda 2. Skomplikowana
Ta metoda jest nieco bardziej skomplikowana, ale używa tylko jednej formuły tablicowej. Powiedzmy, że musimy utworzyć listę 9 niepowtarzających się losowych liczb całkowitych z zakresu od 1 do 50 na arkuszu.
Wprowadź następującą formułę w komórce A2, kliknij na końcu Ctrl + Shift + Enter (aby wprowadzić ją jako formułę tablicową!) i skopiuj formułę do żądanej liczby komórek:
Metoda 3. Makro
I oczywiście możesz rozwiązać ten problem za pomocą programowania w Visual Basic. W jednym ze starych artykułów o losowym losowaniu przytoczyłem już funkcję makra Lotto array, która generuje wymaganą liczbę losowych, nie powtarzających się liczb z danego interwału.
- Jak policzyć liczbę unikalnych wartości w zakresie?
- Losowy wybór elementów z listy