Excel: Funkcja FILTRUJ()

Funkcja filtruj to prawdziwy game changer jeśli chodzi o pracę z danymi w programie MS Excel. Niestety jest ona dostępna tylko dla subskrybentów Office 365.

Jak działa funkcja filtruj?

Funkcja ta działa podobnie jak klasyczne filtrowanie w tabelach, jednakże kryteria po których chcemy filtrować możemy wpisać do komórek arkusza. Nie trzeba klikać za każdym razem w ikonkę filtra przy nagłówku tabeli.
Działanie funkcji jest podobne do działania X.WYSZUKAJ() oraz WYSZUKAJ.PIONOWO jednak jest jedna zasadnicza różnica- funkcja FILTRUJ() może wyświetlać wiele dopasowanych wyników.

Składnia funkcji

=FILTRUJ(B:D;E:E=J2;””)

=FILTRUJ(B:D [Zakres- kolumny które mają się wyświetlić];E:E=J2 [Kryteria- szuka wartości z komórki J2 w kolumnie E];”” [co ma być wynikiem w wypadku nieznalezienia pasujących wyników])

Funkcja FILTRUJ()

No bardzo fajnie, ale co dalej?

Dalej już jest tylko lepiej, ponieważ funkcję tą możemy łączyć z wieloma innymi, co czyni ją potężnym narzędziem.

Częściowe dopasowanie

W przykładzie ze składni funkcja szuka nam dopasowania dokładnego, a co jeśli chcemy tylko częściowe dopasowanie? Tutaj sprawa też jest prosta, choć wymaga odrobinę większego wysiłku. W tym przypadku użyjemy 2 funkcji: CZY.LICZBA() oraz ZNAJDŹ(). Ta pierwsza zwraca PRAWDA gdy wartość w nawiasie jest liczbą, a druga numer znaku w wyrazie od którego występuje dana fraza. Zastosowanie ich razem w funkcji FILTRUJ() znajduje się w poniższym przykładzie:

=FILTRUJ(E:E;CZY.LICZBA(ZNAJDŹ(J2;E:E));””)

Funkcja FILTRUJ() częściowe dopasowanie

Jak widać drugi argument to nie jest prosty warunek ze znakiem „=” lecz wypisane wyżej funkcje. Żeby zrozumieć zasadę działania trzeba prześledzić na jakiej zasadzie działa funkcja FILTRUJ(). Gdy funkcja w drugim argumencie (kryteria) znajdzie dopasowaną wartość w szukanej kolumnie, przypisuje tej komórce wartość PRAWDA. Tylko komórki z wartością prawda są wyświetlane.
Właśnie dlatego musimy użyć funkcji CZY.LICZBA() razem ze ZNAJDŹ(). Przyjrzyjmy się temu na przykładzie.
gdy szukamy np. „a” w wyrazie jabłko, to funkcja znajdź wygląda następująco: ZNAJDŹ(„a”;”jabłko”) i zwróci liczbę 2, gdyż „a” występuje na 2 miejscu w tym wyrazie. Wtedy funkcja CZY.LICZBA(ZNAJDŹ(„a”;”jabłko”)) zwróci wartość PRAWDA. Tak samo działa to dla komórek i zakresów. Funkcja ta każdej komórce z zakresu przypisuje wartość Prawda lub Fałsz i funkcja FILTRUJ() wie jakie wiersze ma wyświetlić.

Transponuj oraz Połącz teksty

Jak można było zauważyć funkcja filtruj może zająć sporo komórek w arkuszu i w dodatku, gdy funkcja będzie zmuszona wyświetlać wynik na komórce w której już jest jakaś inna wartość, nastąpi tzw. rozlanie i wyniki nie zostaną wyświetlone. Zdarza się to szczególnie wtedy, gdy mamy jakąś listę kryteriów i przeciągamy funkcję np. w dół żeby przefiltrować zakres po każdej z tych wartości. W takiej sytuacji gdy mamy więcej wyników niż 1, gdy będziemy przeciągać funkcję w dół, to w każdej zamiast wyników ujrzymy błąd #ROZLANIE. Na szczęście istnieją sposoby by dostać wyniki.

W komórkach K2 do K3 jest wpisana funkcja FILTRUJ(), w dwóch pierwszych nie może się zrealizować gdyż przeszkadzają jej zapełnione komórki poniżej

Transponuj

Jednym ze sposobów jest użycie funkcji transponuj

=TRANSPONUJ(FILTRUJ(E:E;CZY.LICZBA(ZNAJDŹ(J2;E:E));””))

Sprawdza się szczególnie wtedy gdy gdy jako zakres mamy 1 kolumnę. Wtedy wynik zamiast w pionie, jest wyświetlany w poziomie. W ten sposób unikniemy rozlania pod warunkiem że w kolejnych komórkach w tym samym wierszu nie mamy zapisanych wartości, gdyby jednak okazało się, że mamy wolną tylko 1 komórkę lub chcemy mieć wszystkie wyniki skompresowane w 1 komórce, z pomocą przychodzi funkcja POŁĄCZ.TEKSTY()

Użycie funkcji TRANSPONUJ() razem z funkcją FILTRUJ()

Połącz teksty

Jest to jedna z moich ulubionych funkcji do łączenia tekstów w komórkach gdyż pozwala pomijać puste komórki. jej składnia wygląda następująco

=POŁĄCZ.TEKSTY(ZNAK(10);PRAWDA;FILTRUJ(E:E;CZY.LICZBA(ZNAJDŹ(J2;E:E));””))

Użycie funkcji POŁĄCZ.TEKSTY() razem z FILTRUJ()

Pierwszy argument to znak, który ma łączyć teksty. Może być to np. spacja, w takim przypadku wystarczy wpisać ” ” lub myślnik „-„.W tym przypadku chcę, by wyniki były oddzielone enterem i mogę to uzyskać właśnie przy pomocy funkcji ZNAK(10), która zwraca znak ANSI po podanym numerze, 10 to enter. Kolejny argument pyta czy pomijać puste komórki, ja chcę je pominąć, więc piszę PRAWDA. Gdy nasz zakres to tylko jedna kolumna, wszystkie wyniki uzyskamy w jednej komórce. Wystarczy teraz włączyć zawijanie wierszy i już wszystko będzie klarownie widoczne.

Można też użyć funkcji POŁĄCZ.TEKSTY() gdy w zakresie mamy więcej niż 1 kolumnę

Filtrowanie po więcej niż 1 kolumnie i wielu kryteriach

Jest to jak najbardziej możliwe w funkcji FILTRUJ(). Łącznikami takimi są znak + (w funkcji oznaczający logiczne OR) oraz * (logiczne AND).

=FILTRUJ(E:G;(E:E=J2) + (E:E=J3) + (E:E=J4)) * (F:F>J5);””)

Użycie wielu kryteriów funkcji FILTRUJ()

W powyższym przykładzie znajdujemy wartości równe J2, J3 i J4 (połączone + czyli logicznym OR) w zakresie kolumny E lub wartości większe od J5 w kolumnie F. Należy zwrócić szczególną uwagę na ułożenie nawiasów. Każde z kryteriów znajduje się w jednym i dodatkowo Całe wyrażenie LUB jest w nawiasie co oznacza, że ostatnie kryterium F:F>J5 będzie się odnosiło do każdego z osobna. Gdyby nawias okalający wszystkie kryteria LUB nie był obecny, wtedy warunek AND odnosiłby się tylko do ostatniego kryterium E:E=J4.
Dlaczego w wynikach nie ma Potato Chips? Ponieważ nie sprzedano nigdy więcej niż 58 sztuk

Jednym z kryteriów może być również omawiane wcześniej filtrowanie tylko po częściowym dopasowaniu (z użyciem CZY.LICZBA(ZNAJDŹ())).

Użycie wielu kryteriów w funkcji FILTRUJ()- znajduje produkty ze słowem Carrot, gdzie ilość sprzedanych sztuk jest większa niż 40
Użycie wielu kryteriów- znajduje tylko produkty z wyrazem Carrot i Chocolate, gdzie ilość sprzedanych jest większa od 40

W powyższym przykładzie należy zwrócić uwagę na nawiasy w kryteriach funkcji FILTRUJ().

Sanityzacja wyników

Może być tak, że kilka wyników z filtrowania może przynieść te same wartości. Wówczas można użyć funkcji UNIKATOWE(), która jak nazwa wskazuje wyświetla tylko unikatowe wartości.

=POŁĄCZ.TEKSTY(ZNAK(10);PRAWDA;UNIKATOWE(FILTRUJ(E:E;CZY.LICZBA(ZNAJDŹ(J2;E:E));””)))

Użycie funkcji UNIKATOWE() z funkcją FILTRUJ()

Funkcję UNIKATOWE() zamieszczać należy zaraz przed funkcją filtruj. Bardzo dobrze sprawdza się ona razem z funkcją POŁĄCZ.TEKSTY()

Jest wiele możliwości

Kolejnym przykładem wykorzystania funkcji filtruj jest funkcja MAX(), która zwraca tylko najwyższą wartość z wybranych kolumn (w przypadku kolumn tekstowych zależy od pierwszej litery)

=MAX(FILTRUJ(F:F;(E:E=J2) + (E:E=J3) + (E:E=J4) * (F:F>J5) ;””))

Uzyskanie maksymalnej ilości sztuk sprzedaży podanych produktów MAX() razem z FILTRUJ()

Zwróć uwagę w powyższym przykładzie, że funkcja bierze maksymalną wartość tylko z wypisanych produktów (akurat tutaj Whole Wheat ma ogólnie najwyższą). Dodatkowo ostatni argument jest trochę bez sensu, ale bierze pod uwagę tylko ilości Potato Chips (a nie wszystkich artykułów, patrz nawiasy), które sprzedały się w ilości powyżej 58.

Man nadzieję, że po przeczytaniu tego wpisu przyjdzie Ci na myśl jak możesz wykorzystać potencjał funkcji FILTRUJ() w swojej pracy. Zachęcam Cię też do samodzielnego poszukiwania najbardziej przydatnej konfiguracji tej funkcji i próbowania łączenia jej z innymi. Do zobaczenia w następnym wpisie!

Dodaj komentarz