Несколько критериев Vlookup с VBA UDF - Примеры кода VBA

Несколько условий 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 для этого руководства, щелкните здесь

wave wave wave wave wave