Кілька критеріїв Vlookup з VBA UDF - Приклади коду VBA

Перегляд декількох умов за допомогою VBA

Розглянемо таку таблицю даних:

Стандартна функція Vlookup у програмі Excel має такий формат:

VLOOKUP ("" Позначка ", B6: G12", 2, НЕВІРНО)

Який поверне "Браун".

Однак що, якби ми хотіли шукати 2 або більше умов, наприклад, ім’я, прізвище та вік у наведеній вище таблиці? Наступний UDF дозволяє нам це зробити:

123456789101112131415161718192021222324252627282930313233343536373839 Функція ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 as Variant) Як варіант'Заявляйте змінніDim CellDim Current_Row як ціле числоDim No_Of_Rows_in_Range як ціле числоDim No_of_Cols_in_Range As IntegerDim Matching_Row як ціле число'встановити відповідь на 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) І _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) І _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) ТодіMatching_Row = Поточний_RowЗакінчити ЯкщоCurrent_Row = Поточний_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 - це ціле число для потрібного стовпця
• Параметр1, Параметр2 та Параметр3 - це значення з перших трьох стовпців відповідно

Так що:

= 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 для цього підручника

wave wave wave wave wave