Formuła programu Excel: FILTRUJ na n najwyższych wartościach z kryteriami -

Formuła ogólna

=FILTER(data,(range>=LARGE(IF(criteria),n))*(criteria))

Podsumowanie

Aby przefiltrować dane w celu wyświetlenia n pierwszych wartości, które spełniają określone kryteria, można użyć funkcji FILTER razem z funkcjami LARGE i IF. W pokazanym przykładzie formuła w F5 to:

=FILTER(data,(score>=LARGE(IF(group="b",score),3))*(group="b"))

gdzie dane (B5: D16), grupa (C5: C16) i wynik (D5: D16) to nazwane zakresy.

Wyjaśnienie

Ta formuła używa funkcji FILTER do pobierania danych na podstawie testu logicznego utworzonego przy użyciu funkcji LARGE i IF. Rezultatem są 3 najlepsze wyniki w grupie B.

Funkcja FILTER stosuje kryteria z argumentem include. W tym przykładzie kryteria są konstruowane za pomocą logiki boolowskiej w następujący sposób:

(score>=LARGE(IF(group="b",score),3))*(group="b")

Wyniki po lewej stronie wyrażenia są wyższe lub równe trzeciemu najwyższemu wynikowi w grupie B:

score>=LARGE(IF(group="b",score),3)

Funkcja JEŻELI służy do upewnienia się, że LARGE działa tylko z wynikami grupy B. Ponieważ mamy łącznie 12 wyników, JEŻELI zwraca tablicę z 12 wynikami w następujący sposób:

(FALSE;65;FALSE;80;FALSE;88;FALSE;76;FALSE;86;FALSE;83)

Zauważ, że jedyne wyniki, które przetrwały operację, pochodzą z grupy B. Wszystkie inne wyniki są FAŁSZ. Ta tablica jest zwracana bezpośrednio do LARGE jako argument tablicy:

LARGE((FALSE;65;FALSE;80;FALSE;88;FALSE;76;FALSE;86;FALSE;83),3)

LARGE ignoruje wartości FALSE i zwraca trzeci najwyższy wynik, 83.

Możemy teraz uprościć formułę, aby:

=FILTER(data,(score>=83)*(group="b"))

co prowadzi do:

=FILTER(data,(0;0;0;0;0;1;0;0;0;1;0;1))

Na koniec FILTER zwraca rekordy dla Masona, Annie i Cassidy'ego, które dochodzą do zakresu F5: H7.

Sortuj wyniki według wyniku

Domyślnie FILTER zwraca pasujące rekordy w tej samej kolejności, w jakiej występują w danych źródłowych. Aby posortować wyniki w porządku malejącym według wyniku, możesz zagnieździć oryginalną formułę FILTER wewnątrz funkcji SORT w następujący sposób:

=SORT(FILTER(data,(score>=LARGE(IF(group="b",score),3))*(group="b")),3,-1)

W tym przypadku FILTER zwraca wyniki bezpośrednio do funkcji SORT jako argument tablicy. Indeks sortowania jest ustawiony na 3 (wynik), a porządek sortowania jest ustawiony na -1, dla porządku malejącego.

Interesujące artykuły...