Vlookup множество условия, използващи VBA
Помислете за следната таблица с данни:
Стандартната функция Vlookup в Excel има следния формат:
VLOOKUP (“” Mark ”, B6: G12”, 2, FALSE)
Което ще върне „Браун“.
Какво ще кажете обаче, ако искаме да потърсим 2 или повече условия, например име, фамилия и възраст в горната таблица? Следният UDF ни позволява да направим това:
123456789101112131415161718192021222324252627282930313233343536373839 | Функция ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 като вариант, Parameter2 като вариант, Parameter3 като вариант) Като вариант„Декларирайте променливиDim CellDim Current_Row As IntegerDim No_Of_Rows_in_Range As IntegerDim No_of_Cols_in_Range As IntegerDim Matching_Row As Integer'задайте отговор на N/A по подразбиранеThreeParameterVlookup = CVErr (xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Данни_Range.Rows.CountNo_of_Cols_in_Range = Данни_Range.Columns.Count„Проверете дали Col е по -голям от броя на колоните в диапазонаАко (Col> No_of_Cols_in_Range) ТогаваThreeParameterVlookup = CVErr (xlErrRef)Край АкоАко (Col <= No_of_Cols_in_Range) ТогаваНаправетеАко ((Data_Range.Cells (Current_Row, 1) .Value = Parameter1) И _(Range_Dange.Cells (Current_Row, 2). Value = Parameter2) И _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) ТогаваMatching_Row = Текущ_RowКрай АкоCurrent_Row = Current_Row + 1Цикъл до ((Current_Row = No_Of_Rows_in_Range) Или (Matching_Row 0))Ако Matching_Row 0 ТогаваThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Край АкоКрай АкоКрайна функция |
Той има следния синтаксис:
ThreeParameterVlookup (Data_Range, Col, Parameter1, Parameter2, Parameter3)
Където:
• Data_Range е обхватът на данните
• Col е цяло число за необходимата колона
• Parameter1, Parameter2 и Parameter3 са стойностите съответно от първите три колони
Така че:
= ThreeParameterVlookup (B6: G12,6, "Mark", "Brown", 7) ще върне "Tolworth", тъй като това съвпада с "Mark", "Brown" и 7 и препратка към 6 -та колона
Обърнете внимание, че тази функция ще работи и с (динамични) именови диапазони:
= ThreeParameterVlookup (named_range, 6, “Adrian”, “White”, 7) ще върне “Chessington”, където сме задали именования диапазон “Named_Range”.
Ако Excel не може да намери съвпадение, по подразбиране се връща „N/A“. Всъщност функцията приема стойност N/A в началото и след това се променя само когато намери точно съвпадение.
Също така, ако стойността на Col надвишава броя на колоните, тогава възниква грешка за справка.
Щракнете тук, за да изтеглите .XLSM файла за този урок