Перегляд декількох умов за допомогою 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 для цього підручника