Vlookup wiele warunków za pomocą VBA
Rozważ poniższą tabelę danych:
Standardowa funkcja Vlookup w programie Excel ma następujący format:
WYSZUKAJ.PIONOWO(""Znak", B6:G12",2,FAŁSZ)
Co zwróci „Brown”.
Co jednak, gdybyśmy chcieli sprawdzić 2 lub więcej warunków, np. imię, nazwisko i wiek w powyższej tabeli? Umożliwia nam to następujący UDF:
123456789101112131415161718192021222324252627282930313233343536373839 | Funkcja ThreeParameterVlookup (zakres_danych jako zakres, kolumna jako liczba całkowita, parametr1 jako wariant, parametr2 jako wariant, parametr3 jako wariant) jako wariant„Zadeklaruj zmienne”Przyciemnij komórkęDim Current_Row jako liczba całkowitaDim No_Of_Rows_in_Range jako liczba całkowitaDim No_of_Cols_in_Range jako liczba całkowitaDim Matching_Row jako liczba całkowita„domyślnie ustaw odpowiedź na nie dotyczy”Przeglądanie trzech parametrów = CVErr(xlErrNA)Matching_Row = 0Bieżący_wiersz = 1No_Of_Rows_in_Range = Data_Range.Rows.CountLiczba_kolumn_w_zakresie = Zakres_danych.Liczba kolumn'Sprawdź, czy Col jest większe niż liczba kolumn w zakresieJeśli (Kol > Liczba_kolumn_w_zakresie) WtedyPrzeglądanie trzech parametrów = CVErr(xlErrRef)Zakończ, jeśliJeśli (kolumna <= liczba_kolumn_w_zakresie) WtedyRobićIf ((Data_Range.Cells(Current_Row, 1).Value = Parameter1) And _(Data_Range.Cells(Current_Row, 2).Wartość = Parametr2) i _(Data_Range.Cells(Current_Row, 3).Value = Parameter3)) NastępnieDopasowany_wiersz = Bieżący_wierszZakończ, jeśliBieżący_wiersz = Bieżący_wiersz + 1Pętla do ((Current_Row = No_Of_Rows_in_Range) lub (Matching_Row 0))Jeśli pasujący_wiersz 0 toThreeParameterVlookup = Data_Range.Cells(Pasujący_wiersz, Col)Zakończ, jeśliZakończ, jeśliKoniec funkcji |
Ma następującą składnię:
ThreeParameterVlookup (zakres_danych, kolumna , parametr1, parametr2 , parametr3 )
Gdzie:
• Data_Range to zakres danych
• Col jest liczbą całkowitą dla wymaganej kolumny
• Parametr1, Parametr2 i Parametr3 to odpowiednio wartości z pierwszych trzech kolumn
Aby:
=ThreeParameterVlookup(B6:G12,6”,Mark”,”Brown”,7) zwróci „Tolworth”, ponieważ jest to dopasowanie dla „Mark”, „Brown” i 7 oraz odniesienie do szóstej kolumny
Zauważ, że ta funkcja będzie również działać z (dynamicznymi) nazwanymi zakresami:
=ThreeParameterVlookup(nazwany_zakres,6”,Adrian”,„Biały”,7) zwróci „Chessington”, gdzie ustawiliśmy nazwany zakres „Nazwany_zakres”.
Jeśli program Excel nie może zlokalizować dopasowania, domyślnie zwracane jest „Nie dotyczy”. W rzeczywistości funkcja na początku przyjmuje wartość N/A, a następnie zmienia się tylko wtedy, gdy znajdzie dokładne dopasowanie.
Również jeśli wartość Col przekracza liczbę kolumn, pojawia się błąd odniesienia.
Aby pobrać plik .XLSM do tego samouczka, kliknij tutaj