Funkcja WYSZUKAJ.PIONOWO ma jedną znaczącą wadę – wyszukuje tylko wartości z pierwszej kolumnie. Czasami jednak pojawia się potrzeba zmiany tej kolumny. Zadanie to jest proste, gdy potrzeba pobrać wartości z prawej strony kolumny w której ma miejsce wyszukiwanie. Problem pojawia się w sytuacji gdy dane znajdują się po lewej stronie kolumny, w której następuje wyszukiwanie.
Najprostszym rozwiązaniem jest zmiana układu kolumn w źródle danych. Ale nie jednokrotnie operacja taka nie jest możliwa do przeprowadzenia, albo sami jej nie chcemy przeprowadzać. Taka sytuacja może mieć miejsce gdy dane pochodzą z jakiegoś systemu i mają stale ustalony układ. W celu zilustrowania tego problemu posłużę się tabelą z następującymi kolumnami:
-
Nazwa – nazwa produktu,
-
Kod – kod produktu.
Zadanie natomiast polega na znalezieniu nazwy produktu na podstawie jego kodu.
W tym celu można zastosować dwa podejścia – wykorzystując funkcje:
-
WYSZUKAJ,
-
INDEKS i PODAJ.POZYCJĘ.
Pierwsze rozwiązanie – funkcja WYSZUKAJ – potrzebuje podania dwóch obszarów:
=WYSZUKAJ(Szukana wartość, Obszar 1, Obszar 2)
Funkcja ta wyszukuje Szukaną wartość w Obszarze 1 i następnie zwraca wartość z Obszaru 2, znajdującą się w odpowiednim wierszu. Aby funkcja ta działała prawidło musi zostać spełniony dodatkowy warunek – wartości w Obszarze 1 muszą być posortowane rosnąca. Dodatkowo funkcja ta ma wadę. Jeśli wpiszemy błędny kod to funkcja ta może zwrócić wartość niepoprawną – odpowiadającą produktowi o innym kodzie. Takie działanie jest nie poprawne i może prowadzić do błędów.
Tego błędu nie ma drugie rozwiązanie wykorzystujące złożenie funkcji INDEKS i PODAJ.POZYCJĘ:
=INDEKS(Obszar 2; PODAJ.POZYCJĘ(Szukana wartość; Obszar 1; 0))
W tym przypadku każde błędne wpisanie kodu będzie powodowało zwrócenie błędu #N/D!. W tej sytuacji można dodać komentarz informujący i błędnym wpisaniu kodu.
Plik: Przyklad.xslx
SpeX
31/03/2015 o 23:54Faktycznie, to rozwiązuje ten problem. Choć szkoda iż funkcja szukaj ma takie ograniczenia. Aż się prosi prosi by zrobić VBA swoją wersję funkcji szukaj. Tylko pytanie, czy można nadpisać systemową funkcję?
Michał Jankowski
01/04/2015 o 17:24Nadpisać systemowej funkcji się nie da, ale zawsze można dodać nową swoją. Tylko w przypadku VBA pojawi się pytanie o włączenie makr. Czasami włączanie makr jest zablokowane. Natomiast formuła będzie działać zawsze.