Baza wiedzy / Excel

WYSZUKAJ.PIONOWO w Excelu: składnia, przykłady i pułapki

Pokazuję, jak WYSZUKAJ.PIONOWO znajduje wartość w pierwszej kolumnie tabeli, dlaczego czwarty argument zawsze wpisuję sam i co psuje formułę po dodaniu kolumny.

Kajo RudzińskiOpublikowano Aktualizacja 5 min czytania

Pikselowa wieża arkusza, w której lupa przesuwa się po pierwszej kolumnie i oświetla wartość w tym samym wierszu.

WYSZUKAJ.PIONOWO to funkcja, od której wiele osób zaczyna łączenie tabel w Excelu. Mam identyfikator w jednym miejscu, a potrzebuję ceny, nazwy albo kategorii z cennika. Funkcja znajduje ten identyfikator w pierwszej kolumnie wskazanej tabeli i zwraca wartość z tego samego wiersza.

Działa w każdej wersji Excela, więc spotkasz ją w starych raportach i w plikach od klientów. Ma też dwie pułapki, które potrafią dać poprawnie wyglądający, ale zły wynik. Opisuję je niżej. Szerszy przykład z zamówieniami, duplikatami i porównaniem trzech funkcji znajdziesz w artykule WYSZUKAJ.PIONOWO, WYSZUKAJ.POZIOMO i X.WYSZUKAJ: przykład od początku.

Składnia WYSZUKAJ.PIONOWO

=WYSZUKAJ.PIONOWO(szukana_wartość; tabela_tablica; nr_kolumny; [przeszukiwany_zakres])
  • szukana_wartość: to, czego szukam, na przykład identyfikator produktu albo adres komórki z tym identyfikatorem.
  • tabela_tablica: zakres, w którego pierwszej kolumnie leży szukana wartość. Kolumna z wynikiem musi być na prawo od niej.
  • nr_kolumny: numer kolumny wyniku liczony od lewej krawędzi zakresu, a nie od kolumny A arkusza.
  • przeszukiwany_zakres: FAŁSZ (albo 0) oznacza dopasowanie dokładne, PRAWDA (albo 1) przybliżone. Pominięty argument oznacza PRAWDA.

W angielskiej wersji Excela ta sama funkcja nazywa się VLOOKUP, a angielskie poradniki oddzielają argumenty przecinkiem. Separator wynika z ustawień regionalnych, więc formułę skopiowaną z takiego poradnika przepisuję na polskie nazwy funkcji i, jeśli trzeba, na średniki.

Przykład: cena produktu po identyfikatorze

Pracuję na małym, syntetycznym cenniku w arkuszu Produkty, w zakresie A1:D6:

ID Produkt Kategoria Cena
P-101 Kubek Dom 24,90
P-102 Notes Biuro 12,50
P-103 Lampka Dom 89,00
P-104 Długopis Biuro 4,20
P-105 Plecak Podróż 149,00

Chcę poznać cenę produktu P-103:

=WYSZUKAJ.PIONOWO("P-103"; Produkty!$A$2:$D$6; 4; FAŁSZ)

Wynik to 89,00. Excel znalazł P-103 w pierwszej kolumnie zakresu i oddał wartość z czwartej kolumny tego zakresu, czyli z kolumny Cena.

W prawdziwym pliku nie wpisuję identyfikatora na sztywno. Mam go w komórce obok, na przykład w B2 arkusza zamówień:

=WYSZUKAJ.PIONOWO(B2; Produkty!$A$2:$D$6; 4; FAŁSZ)

Znaki $ blokują zakres cennika. Bez nich po przeciągnięciu formuły w dół zakres przesuwałby się razem z nią i kolejne wiersze szukałyby w coraz mniejszym fragmencie cennika. To częsty powód, dla którego formuła działa w pierwszym wierszu, a w dziesiątym zwraca #N/D!.

Dwie rzeczy o dopasowaniu tekstu warto wiedzieć od razu. Funkcja nie rozróżnia wielkości liter, więc p-103 też znajdzie P-103. Przy dopasowaniu dokładnym obsługuje symbole wieloznaczne: ? oznacza dowolny pojedynczy znak, a * dowolny ciąg znaków. Jeśli szukany tekst zawiera gwiazdkę albo znak zapytania dosłownie, poprzedź go tyldą ~.

Dokładne i przybliżone dopasowanie

Czwarty argument wpisuję zawsze sam. Domyślne PRAWDA zakłada, że pierwsza kolumna jest posortowana rosnąco, i dopasowuje wiersz z największą wartością mniejszą lub równą szukanej. Przy identyfikatorach prawie nigdy tego nie chcę. Na nieposortowanej liście formuła bez czwartego argumentu może zwrócić wartość z innego wiersza bez żadnego komunikatu o błędzie.

Przybliżone dopasowanie ma jednak sensowne zastosowanie: progi. Załóżmy syntetyczną tabelę rabatów w F1:G5, posortowaną rosnąco po pierwszej kolumnie:

Od kwoty Rabat
0 0%
500 3%
1000 5%
5000 8%
=WYSZUKAJ.PIONOWO(1200; $F$2:$G$5; 2; PRAWDA)

Wynik to 5%, bo 1000 jest największym progiem nie większym niż 1200. Dla kwoty 499,99 dostanę 0%, dla 5000 już 8%. Dla kwoty ujemnej, mniejszej od pierwszego progu, funkcja zwróci #N/D!. Próg dopisany pod tabelą wymaga też rozszerzenia zakresu w formule, a próg wstawiony w środku bez sortowania może rozjechać wyniki. Dlatego przy takich tabelach dodaję obok krótką notkę „sortuj rosnąco i sprawdź zakres”.

Błędy i co mi mówią

Błąd Co zwykle oznacza
#N/D! Nie ma takiej wartości w pierwszej kolumnie. Albo jest, ale różni się typem: 101 jako liczba i “101” jako tekst to dla Excela dwie różne wartości.
#ADR! nr_kolumny jest większy niż liczba kolumn w zakresie, na przykład 5 przy zakresie A:D.
#ARG! nr_kolumny jest mniejszy niż 1.

Najgroźniejszy jest jednak wynik bez błędu, który pochodzi z niewłaściwego wiersza albo z niewłaściwej kolumny. Dlatego po napisaniu formuły sprawdzam ręcznie dwa, trzy wiersze, w tym jeden, którego klucza w słowniku na pewno nie ma.

Na brak dopasowania reaguję świadomie. Jeśli produkt może nie istnieć w cenniku, opisuję to w wyniku zamiast chować:

=JEŻELI.ND(WYSZUKAJ.PIONOWO(B2; Produkty!$A$2:$D$6; 4; FAŁSZ); "brak w cenniku")

Wybieram JEŻELI.ND zamiast JEŻELI.BŁĄD, bo przechwytuje tylko #N/D!. Błąd #ADR! po złym numerze kolumny nadal będzie widoczny i nie zniknie pod napisem „brak w cenniku”.

Numer kolumny to najsłabsze miejsce formuły

Dwie pikselowe tabele: w drugiej dodatkowa kolumna przesuwa cel, a promień z pierwszej kolumny zatrzymuje się na niewłaściwym bloku.

Załóżmy, że ktoś wstawi w cenniku nową kolumnę Stan magazynu między Kategorią a Ceną. Excel rozszerzy zakres w formule do $A$2:$E$6, ale liczba 4 zostanie taka sama. Formuła zacznie zwracać stan magazynu zamiast ceny. Nie pojawi się żaden błąd, zmienią się tylko liczby.

Mam na to dwa sposoby. Pierwszy zostaje przy WYSZUKAJ.PIONOWO i liczy numer kolumny po nagłówku za pomocą PODAJ.POZYCJĘ:

=WYSZUKAJ.PIONOWO(B2; Produkty!$A$2:$E$6; PODAJ.POZYCJĘ("Cena"; Produkty!$A$1:$E$1; 0); FAŁSZ)

Drugi to X.WYSZUKAJ, w którym osobno wskazuję kolumnę kluczy i kolumnę wyniku. Po wstawieniu kolumny Excel przesuwa odwołanie razem z kolumną Cena, więc formuła dalej zwraca cenę. Tak wygląda ona po zmianie, gdy cena jest już w kolumnie E:

=X.WYSZUKAJ(B2; Produkty!$A$2:$A$6; Produkty!$E$2:$E$6; "brak w cenniku")

Kiedy wybieram inną funkcję

WYSZUKAJ.PIONOWO zostawiam w plikach, które muszą działać w starszych wersjach Excela, oraz w istniejących raportach, które działają poprawnie. Nie przepisuję ich tylko dla nowszej nazwy funkcji.

W nowym pliku wybieram X.WYSZUKAJ, jeśli wszyscy odbiorcy ją mają. Według Microsoft jest dostępna między innymi w Microsoft 365, Excelu 2021 i 2024 oraz w Excelu w przeglądarce, ale nie w Excelu 2016 i 2019. Pozwala szukać w lewo, ma wbudowaną wartość na brak dopasowania i domyślnie szuka dokładnie.

Gdy plik ma działać wszędzie, a potrzebuję wyszukiwania w lewo, łączę INDEKS z PODAJ.POZYCJĘ. Ten sam pomysł w układzie wierszy zamiast kolumn realizuje WYSZUKAJ.POZIOMO.

Krótkie ćwiczenie

Przepisz cennik z przykładu do arkusza i dodaj obok trzy identyfikatory: P-102, p-104 i P-110. Napisz formułę z dokładnym dopasowaniem i sprawdź, który wynik jest ceną, a który brakiem. Potem wstaw kolumnę między Kategorią a Ceną i zobacz, co stało się z wynikami. Na koniec popraw formułę jednym z dwóch sposobów opisanych wyżej i upewnij się, że ceny wróciły na swoje miejsce.

Najważniejsze w pigułce

Jak nazywa się VLOOKUP w polskim Excelu?

WYSZUKAJ.PIONOWO. W polskich ustawieniach regionalnych argumenty oddziela się zwykle średnikiem, a dokładne dopasowanie zapisuje jako FAŁSZ albo 0.

Dlaczego WYSZUKAJ.PIONOWO zwraca #N/D!, choć widzę wartość w tabeli?

Najczęściej klucze różnią się typem albo znakami: liczba zapisana jako tekst, dodatkowa spacja albo inny myślnik. Funkcja nie rozróżnia za to wielkości liter.

Czy WYSZUKAJ.PIONOWO potrafi zwrócić wartość z kolumny po lewej?

Nie. Szuka zawsze w pierwszej kolumnie zakresu i zwraca wartość z kolumny po prawej. Do wyszukiwania w lewo używam X.WYSZUKAJ albo INDEKS z PODAJ.POZYCJĘ.

Kajo Rudziński

Newsletter KajoData

Zostańmy w kontakcie.

Piszę o analizie danych, uczeniu się i zmianie pracy. Dzielę się tym, co pomaga mi ogarniać technologię i zawodowe decyzje. Jeśli lubisz ten sposób myślenia, zapraszam do mojego newslettera.