
Formuła ogólna
=INDEX(names,RANDARRAY(n,1,1,COUNTA(names),TRUE))
Podsumowanie
Aby utworzyć losową listę nazwisk, możesz użyć funkcji INDEKS i RANDARRAY w celu wybrania losowych nazw z istniejącej listy. W przedstawionym przykładzie formuła w D5 to:
=INDEX(names,RANDARRAY(10,1,1,COUNTA(names),TRUE))
która zwraca 10 losowych wartości z nazwanego zakresu „nazwy” (B5: B104).
Wyjaśnienie
Zasadniczo ta formuła wykorzystuje funkcję INDEKS do pobrania 10 losowych nazw z nazwanego zakresu o nazwie „nazwy”, który zawiera 100 nazw. Na przykład, aby pobrać piąte imię z listy, używamy INDEKSU w następujący sposób:
=INDEX(names,5)
Jednak sztuczka w tym przypadku polega na tym, że nie chcemy jednej nazwy w znanej lokalizacji, chcemy 10 losowych nazw w nieznanych lokalizacjach od 1 do 100. Jest to doskonały przypadek użycia funkcji RANDARRAY, która może utworzyć losowy zbiór liczb całkowitych w zadanym zakresie. Pracując od wewnątrz, używamy RANDARRAY, aby uzyskać 10 losowych liczb od 1 do 100 w następujący sposób:
RANDARRAY(10,1,1,COUNTA(names)
Funkcja COUNTA służy do uzyskania dynamicznej liczby nazwisk na liście, ale w tym przypadku możemy zastąpić COUNTA zapisaną na stałe liczbą 100 z takim samym wynikiem:
=INDEX(names,RANDARRAY(10,1,1,100,TRUE))
W obu przypadkach RANDARRAY zwróci 10 liczb w tablicy, która wygląda następująco:
(64;74;13;74;96;65;5;73;84;85)
Uwaga: te liczby są tylko losowe i nie odnoszą się bezpośrednio do pokazanego przykładu.
Ta tablica jest zwracana bezpośrednio do funkcji INDEKS jako argument wiersza:
=INDEX(names, (64;74;13;74;96;65;5;73;84;85)
Ponieważ podajemy INDEKS 10 numerów wierszy, otrzymamy 10 wyników, z których każdy będzie odpowiadał nazwie na danej pozycji. 10 losowych nazw jest zwracanych w zakresie rozlania rozpoczynającym się w komórce D5.
Uwaga: RANDARRAY jest funkcją niestabilną i będzie obliczać ponownie za każdym razem, gdy arkusz zostanie zmieniony, powodując ponowne użycie wartości. Aby zapobiec automatycznemu sortowaniu wartości, możesz skopiować formuły, a następnie użyć polecenia Wklej specjalnie> Wartości, aby przekonwertować formuły na wartości statyczne.
Zapobiegaj duplikatom
Jednym z problemów z powyższym wzorem (w zależności od potrzeb) jest to, że RANDARRAY czasami generuje zduplikowane liczby. Innymi słowy, nie ma gwarancji, że RANDARRAY zwróci 10 unikalnych liczb.
Aby zapewnić 10 różnych nazw z listy, możesz dostosować formułę, aby losowo posortować pełną listę nazwisk, a następnie pobrać pierwsze 10 nazw z listy. Formuła w F5 wykorzystuje to podejście:
=INDEX(SORTBY(names,RANDARRAY(COUNTA(names))),SEQUENCE(10))
Podejście tutaj jest takie samo jak powyżej - używamy INDEKSU do pobrania 10 wartości z listy nazw. Jednak w tej wersji formuły listę nazwisk sortujemy losowo przed przekazaniem listy do INDEKSU w następujący sposób:
SORTBY(names,RANDARRAY(COUNTA(names)))
W tym przypadku funkcja SORTBY jest używana do losowego sortowania listy nazw za pomocą wartości tablicowych utworzonych przez funkcję RANDARRAY, jak wyjaśniono bardziej szczegółowo tutaj.
Na koniec musimy pobrać 10 wartości. Ponieważ mamy już nazwy w kolejności losowej, możemy po prostu zażądać pierwszych 10 za pomocą tablicy utworzonej przez funkcję SEQUENCE w następujący sposób:
SEQUENCE(10)
SEQUENCE buduje tablicę liczb sekwencyjnych:
(1;2;3;4;5;6;7;8;9;10)
który jest zwracany do funkcji INDEKS jako argument wiersza. INDEKS zwraca następnie pierwszych 10 nazw z zakresu rozlania, takiego jak oryginalna formuła.