Formuła programu Excel: sortowanie i wyodrębnianie unikatowych wartości -

Formuła ogólna

=MMULT(--(data>TRANSPOSE(data)),ROW(data)^0)

Podsumowanie

Aby dynamicznie sortować i wyodrębniać unikatowe wartości z listy danych, można użyć formuły tablicowej do ustalenia pozycji w kolumnie pomocniczej, a następnie użyć specjalnie skonstruowanej formuły INDEKS i PODAJ.POZYCJĘ w celu wyodrębnienia unikatowych wartości. W pokazanym przykładzie wzór do ustalenia pozycji w C5: C13 to:

=IF(data="",ROWS(data),MMULT(--(data>TRANSPOSE(data)),ROW(data)^0))

gdzie „dane” to nazwany zakres B5: B13.

Uwaga: jest to formuła tablicowa z wieloma komórkami, wprowadzana za pomocą Ctrl + Shift + Enter.

Wyjaśnienie

Uwaga: podstawowa idea tej formuły pochodzi z przykładu w doskonałej książce Mike'a Girvina Control + Shift + Enter.

W przedstawionym przykładzie zastosowano kilka formuł, które opisano poniżej. Na wysokim poziomie funkcja MMULT służy do obliczania pozycji liczbowej w kolumnie pomocniczej (kolumna C), a pozycja ta jest następnie używana przez formułę INDEKS i PODAJ.POZYCJĘ w kolumnie G w celu wyodrębnienia unikatowych wartości.

Ranking wartości danych

Funkcja MMULT wykonuje mnożenie macierzy i służy do przypisywania rangi numerycznej do każdej wartości. Pierwsza tablica jest tworzona za pomocą następującego wyrażenia:

--(data>TRANSPOSE(data))

Tutaj używamy funkcji TRANSPOSE do tworzenia poziomej tablicy danych , a wszystkie wartości są porównywane ze sobą. Zasadniczo każda wartość jest porównywana z każdą inną wartością, aby odpowiedzieć na pytanie „czy ta wartość jest większa niż każda inna wartość”. W rezultacie powstaje dwuwymiarowa tablica, 9 kolumn x 9 wierszy, wypełniona wartościami PRAWDA i FAŁSZ. Podwójny ujemny (-) jest używany do przekształcenia wartości TRUE FALSE na jedynki i zera. Możesz wizualizować wynikową tablicę w następujący sposób:

Powyższa macierz jedynek i zer staje się tablicą1 wewnątrz funkcji MMULT. Array2 jest tworzony za pomocą tego wyrażenia:

ROW(data)^0

Tutaj każdy numer wiersza w „danych” jest podnoszony do potęgi zera, aby utworzyć jednowymiarową tablicę, 1 kolumna x 9 wierszy, wypełnioną liczbą 1. Następnie MMULT zwraca iloczyn macierzy dwóch tablic, który staje się wartości widoczne w kolumnie rang.

Otrzymujemy wszystkie 9 rankingów w tym samym czasie w tablicy, więc musimy umieścić wyniki w różnych komórkach naraz. W przeciwnym razie w każdej komórce będzie wyświetlana tylko pierwsza wartość rankingu w zwracanej tablicy.

Uwaga: jest to formuła tablicowa z wieloma komórkami, wprowadzana za pomocą klawiszy Ctrl + Shift + Enter w zakresie C5: C13.

Obsługa pustych komórek

Puste komórki są obsługiwane za pomocą tej części formuły rankingu:

=IF(data="",ROWS(data)

Tutaj, zanim uruchomimy MMULT, sprawdzamy, czy bieżąca komórka w "danych" jest pusta. Jeśli tak, przypisujemy wartość rangi równą liczbie wierszy w danych. Ma to na celu wymuszenie pustych komórek na dole listy, skąd można je później łatwo wykluczyć, gdy są wyodrębniane unikalne wartości (wyjaśnione poniżej).

Liczenie unikatowych wartości

Aby policzyć unikalne wartości w danych, formuła w E5 wygląda następująco:

=SUM(--(FREQUENCY(rank,rank)>0))-(blank>0)

Ponieważ powyższa formuła rankingu przypisuje rangę liczbową do każdej wartości, możemy użyć funkcji CZĘSTOTLIWOŚĆ z SUMĄ do zliczania unikatowych wartości. Ta formuła została szczegółowo wyjaśniona tutaj. Następnie odejmujemy 1 od wyniku, jeśli w danych są jakieś puste komórki:

-(blank>0)

gdzie „puste” to nazwany zakres E8 zawierający następującą formułę:

=COUNTBLANK(data)

Zasadniczo zmniejszamy unikalną liczbę o jeden, jeśli w danych znajdują się puste komórki, ponieważ nie uwzględniamy ich w wynikach. Niepowtarzalna liczba w komórce E5 nosi nazwę „unikalna” (w przypadku liczby unikalnej) i jest używana przez formułę INDEKS i PODAJ.POZYCJĘ do odfiltrowania pustych komórek (opisanych poniżej).

Wyodrębnianie unikalnych wartości

Aby wyodrębnić unikalne wartości, G5 zawiera następującą formułę, skopiowaną w dół:

=IF(ROWS($G$5:G5)>unique,"",INDEX(data,MATCH(MIN(IF(ISNA(MATCH(data,$G$4:G4,0)),rank)),rank,0)))

Zanim uruchomimy formułę INDEKS i PODAJ.POZYCJĘ, najpierw sprawdzamy, czy bieżąca liczba wierszy w obszarze wyodrębniania jest większa niż liczba unikatowa nazwanego zakresu „unikalny” (E5):

=IF(ROWS($G$5:G5)>unique,"",

Jeśli tak, zakończyliśmy wyodrębnianie unikatowych wartości i zwracamy pusty ciąg („”). Jeśli nie, uruchamiamy formułę ekstrakcji:

INDEX(data,MATCH(MIN(IF(ISNA(MATCH(data,$G$4:G4,0)),rank)),rank,0))

Zauważ, że są tutaj dwie funkcje MATCH, jedna wewnątrz drugiej. Wewnętrzne PODAJ.POZYCJĘ używa rozszerzającego się zakresu dla tablicy i nazwanego zakresu „dane” jako wartości wyszukiwania:

MATCH(data,$G$4:G4,0)

Zwróć uwagę, że rozszerzany zakres zaczyna się w „wierszu powyżej”, w przykładzie w wierszu 4. Wynikiem z wewnętrznego MATCH jest tablica, która dla każdej wartości w danych zawiera albo pozycję numeryczną (wartość została już wyodrębniona), albo błąd # N / A (wartość nie została jeszcze wyodrębniona). Następnie używamy IF i ISNA do filtrowania tych wyników i zwracamy wartość rankingu dla wszystkich wartości w „danych”, które nie zostały jeszcze wyodrębnione:

IF(ISNA(results),rank))

W wyniku tej operacji powstaje tablica, która jest przekazywana do funkcji MIN w celu uzyskania „minimalnej wartości rangi” dla wartości danych, które nie zostały jeszcze wyodrębnione. Funkcja MIN zwraca tę wartość do zewnętrznej funkcji MATCH jako wartość wyszukiwania, a nazwany zakres „rank” jako tablicę:

MATCH(min_not_extracted,rank)),rank,0)

Na koniec funkcja PODAJ.POZYCJĘ zwraca pozycję najniższej wartości rankingu do INDEKSU jako numer wiersza, a funkcja INDEKS zwraca wartość danych w bieżącym wierszu zakresu wyodrębniania.

Interesujące artykuły...