Несколько условий Vlookup с использованием VBA
Рассмотрим следующую таблицу данных:
Стандартная функция Vlookup в Excel имеет следующий формат:
ВПР («Отметить»; B6: G12; 2; ЛОЖЬ)
Который вернет "Браун".
Однако как насчет того, чтобы найти 2 или более условий, например имя, фамилию и возраст, в приведенной выше таблице? Следующая UDF позволяет нам это делать:
123456789101112131415161718192021222324252627282930313233343536373839 | Функция ThreeParameterVlookup (Data_Range как диапазон, столбец как целое число, параметр1 как вариант, параметр2 как вариант, параметр3 как вариант) как вариант'Объявить переменныеТусклая ячейкаDim Current_Row как целое числоDim No_Of_Rows_in_Range как целое числоDim 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 = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_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) And _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) И _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) ТогдаMatching_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, а затем изменяется только тогда, когда находит точное совпадение.
Также, если значение Col превышает количество столбцов, возникает ошибка ссылки.
Чтобы загрузить файл .XLSM для этого руководства, щелкните здесь