Расширенный VLOOKUP в Excel: множественный, двойной, вложенный

  • Поделись Этим
Michael Brown

На этих примерах вы узнаете, как выполнять Vlookup по нескольким критериям, возвращать конкретный экземпляр или все совпадения, выполнять динамический Vlookup на нескольких листах и многое другое.

Это вторая часть серии, которая поможет вам использовать возможности Excel VLOOKUP. Примеры предполагают, что вы знаете, как работает эта функция. Если нет, то имеет смысл начать с базового использования VLOOKUP в Excel.

Прежде чем двигаться дальше, позвольте мне кратко напомнить вам синтаксис:

VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

Теперь, когда все поняли друг друга, давайте подробнее рассмотрим примеры расширенной формулы VLOOKUP:

    Как выполнить Vlookup по нескольким критериям

    Функция Excel VLOOKUP очень полезна, когда нужно найти определенное значение в базе данных. Однако ей не хватает одной важной особенности - ее синтаксис позволяет искать только одно значение. Но что если вам нужно искать с несколькими условиями? На ваш выбор есть несколько различных решений.

    Формула 1. VLOOKUP с двумя критериями

    Предположим, у вас есть список заказов, и вы хотите найти количество на основе 2 критериев, Имя клиента и Продукт Осложняющим фактором является то, что каждый клиент заказал несколько продуктов, как показано в таблице ниже:

    Обычная формула VLOOKUP не будет работать в этой ситуации, потому что она возвращает первое найденное совпадение на основе одного значения поиска, которое вы указываете.

    Чтобы преодолеть эту проблему, можно добавить вспомогательный столбец и объединить значения из двух столбцов поиска ( Клиент и Продукт ) там. Важно, чтобы столбец-помощник был столбцом самый левый столбец в массиве таблицы, поскольку именно в нем Excel VLOOKUP всегда ищет искомое значение.

    Итак, добавьте столбец слева от таблицы и скопируйте приведенную ниже формулу в этот столбец. Это позволит заполнить вспомогательный столбец значениями из столбцов B и C (символ пробела конкатенирован между ними для лучшей читабельности):

    =B2&" "&C2

    А затем используйте стандартную формулу VLOOKUP и поместите оба критерия в lookup_value аргумент, разделенные пробелом:

    =VLOOKUP("Jeremy Sweets", A2:D11, 4, FALSE)

    Или введите критерии в отдельные ячейки (G1 и G2 в нашем случае) и объедините эти ячейки:

    =VLOOKUP(G1&" "&G2, A2:D11, 4, FALSE)

    Поскольку мы хотим вернуть значение из столбца D, который является четвертым в массиве таблицы, мы используем 4 для col_index_num . range_lookup аргумент имеет значение FALSE, чтобы Vlookup находил точное соответствие. На скриншоте ниже показан результат:

    В случае, если ваша таблица поиска находится в другой лист Включите имя листа в формулу VLOOKUP. Например:

    =VLOOKUP(G1&""&G2, Orders!A2:D11, 4, FALSE)

    В качестве альтернативы создайте именованный диапазон для таблицы поиска (например, Заказы ), чтобы сделать формулу более удобной для чтения:

    =VLOOKUP(G1&""&G2, Orders, 4, FALSE)

    Для получения дополнительной информации см. раздел Как выполнить Vlookup с другого листа в Excel.

    Примечание. Чтобы формула работала правильно, значения в вспомогательном столбце должны быть конкатенированы точно так же, как в lookup_value Например, мы использовали символ пробела для разделения критериев в колонке-помощнике (B2&" "&C2) и формуле VLOOKUP (G1&" "&G2).

    Формула 2. Excel VLOOKUP с несколькими условиями

    Теоретически, вы можете использовать описанный выше подход для Vlookup более двух критериев. Однако здесь есть несколько оговорок. Во-первых, значение поиска ограничено 255 символами, а во-вторых, дизайн рабочего листа может не позволить добавить вспомогательный столбец.

    К счастью, Microsoft Excel часто предоставляет несколько способов сделать одно и то же. Для Vlookup нескольких критериев можно использовать либо комбинацию INDEX MATCH, либо функцию XLOOKUP, недавно появившуюся в Office 365.

    Например, для поиска на основе 3 различных значений ( Дата , Имя клиента и Продукт ), используйте одну из следующих формул:

    =INDEX(D2:D11, MATCH(1, (G1=A2:A11) * (G2=B2:B11) * (G3=C2:C11), 0))

    =XLOOKUP(1, (G1=A2:A11) * (G2=B2:B11) * (G3=C2:C11), D2:D11)

    Где:

    • G1 - критерий 1 (дата)
    • G2 - критерий 2 (имя клиента)
    • G3 - критерий 3 (продукт)
    • A2:A11 - диапазон поиска 1 (даты)
    • B2:B11 - диапазон поиска 2 (имена клиентов)
    • C2:C11 - диапазон поиска 3 (продукты)
    • D2:D11 - диапазон возврата (количество)

    Примечание. Во всех версиях, кроме Excel 365, INDEX MATCH следует вводить как формулу массива CSE, нажав Ctrl + Shift + Enter. В Excel 365, поддерживающем динамические массивы, она также работает как обычная формула.

    Подробное объяснение формул см:

    • XLOOKUP с несколькими критериями
    • Формула INDEX MATCH с несколькими критериями

    Как использовать VLOOKUP для получения 2-го, 3-го или n-го совпадения

    Как вы уже знаете, Excel VLOOKUP может получить только одно совпадающее значение, точнее, он возвращает первое найденное совпадение. Но что делать, если в массиве поиска есть несколько совпадений, и вы хотите получить второй или третий экземпляр? Задача звучит довольно замысловато, но решение существует!

    Формула 1. Vlookup Nth instance

    Предположим, что в одном столбце у вас есть имена клиентов, в другом - купленные ими продукты, и вы хотите найти 2-й или 3-й продукт, купленный данным клиентом.

    Самый простой способ - добавить вспомогательный столбец слева от таблицы, как мы делали в первом примере. Но на этот раз мы заполним его именами клиентов и номерами появлений, как " Джон Доу1 ", " Джон Доу2 " и т.д.

    Чтобы получить вхождение, используйте функцию COUNTIF со смешанной ссылкой на диапазон (первая ссылка абсолютная, а вторая - относительная, например $B$2:B2). Поскольку относительная ссылка меняется в зависимости от позиции ячейки, в которую копируется формула, в строке 3 она станет $B$2:B3, в строке 4 - $B$2:B4 и так далее.

    Соединяясь с именем клиента (B2), формула принимает следующий вид:

    =B2&COUNTIF($B$2:B2, B2)

    Приведенная выше формула помещается в A2, а затем вы копируете ее вниз во столько ячеек, сколько необходимо.

    После этого введите название цели и номер вхождения в отдельные ячейки (F1 и F2) и используйте приведенную ниже формулу для Vlookup конкретного вхождения:

    =VLOOKUP(F1&F2, A2:C11, 3, FALSE)

    Формула 2. Vlookup 2-ое вхождение

    Если вы ищете второй экземпляр искомого значения, то можно обойтись без вспомогательного столбца. Вместо этого создайте массив таблицы динамически, используя функцию INDIRECT вместе с MATCH:

    =VLOOKUP(E1, INDIRECT("A"&(MATCH(E1, A2:A11, 0)+2)&":B11"), 2, FALSE)

    Где:

    • E1 - значение поиска
    • A2:A11 - диапазон поиска
    • B11 - последняя (правая нижняя) ячейка таблицы поиска

    Обратите внимание, что приведенная выше формула написана для конкретного случая, когда ячейки данных в таблице поиска начинаются со строки 2. Если ваша таблица находится где-то в середине листа, используйте эту универсальную формулу, где A1 - левая верхняя ячейка таблицы поиска, содержащая заголовок столбца:

    =VLOOKUP(E1, INDIRECT("A"&(MATCH(E1, A2:A11, 0)+1+ROW(A1))&":B11"), 2, FALSE)

    Как работает эта формула

    Вот ключевая часть формулы, которая создает динамический диапазон vlookup :

    INDIRECT("A"&(MATCH(E1, A2:A11, 0)+2)&":B11")

    Функция MATCH, настроенная на точное совпадение (0 в последнем аргументе), сравнивает имя цели (E1) со списком имен (A2:A11) и возвращает позицию первого найденного совпадения, которая в нашем случае равна 3. Это число будет использоваться как координата начальной строки для диапазона vlookup, поэтому мы прибавляем к нему 2 (+1 для исключения первого экземпляра и +1 для исключения строки 1 с заголовками столбцов).В качестве альтернативы можно использовать 1+ROW(A1) для автоматического расчета необходимой корректировки на основе позиции строки заголовка (A1 в нашем случае).

    В результате мы получаем следующую текстовую строку, которую INDIRECT преобразует в ссылку на диапазон:

    INDIRECT("A"&5&":B11") -> A5:B11

    Этот диапазон переходит в массив_таблиц аргумент VLOOKUP заставляет его начать поиск в строке 5, пропуская первый экземпляр значения поиска:

    VLOOKUP(E1, A5:B11, 2, FALSE)

    Как сделать Vlookup и вернуть несколько значений в Excel

    Функция Excel VLOOKUP предназначена для возврата только одного совпадения. Существует ли способ Vlookup для нескольких экземпляров? Да, существует, хотя и непростой. Для этого требуется комбинированное использование нескольких функций, таких как INDEX, SMALL и ROW - формула массива.

    Например, ниже можно найти все вхождения искомого значения F2 в диапазоне поиска B2:B16 и вернуть несколько совпадений из столбца C:

    {=IFERROR(INDEX($C$2:$C$11, SMALL(IF($F$1=$B$2:$B$11, ROW($C$2:$C$11)-1,""), ROW()-1)),"")}

    Существует 2 способа ввода формулы в рабочий лист:

    1. Введите формулу в первую ячейку, нажмите Ctrl + Shift + Enter , а затем перетащите ее вниз на несколько ячеек.
    2. Выделите несколько соседних ячеек в одном столбце (F1:F11 на скриншоте ниже), введите формулу и нажмите Ctrl + Shift + Enter для ее завершения.

    В любом случае, количество ячеек, в которые вы вводите формулу, должно быть равно или больше, чем максимальное количество возможных совпадений.

    Для подробного объяснения логики формулы и дополнительных примеров, пожалуйста, посмотрите статью Как использовать VLOOKUP для нескольких значений в Excel.

    Как выполнить Vlookup в строках и столбцах (двусторонний поиск)

    Двусторонний поиск (aka матричный поиск или 2-дименсионный поиск ) - это причудливое слово для поиска значения на пересечении определенной строки и столбца. Существует несколько различных способов выполнения двумерного поиска в Excel, но поскольку основное внимание в этом учебнике уделено функции VLOOKUP, мы, естественно, будем использовать ее.

    В данном примере мы возьмем приведенную ниже таблицу с ежемесячными продажами и разработаем формулу VLOOKUP для получения данных о продажах конкретного товара в определенном месяце.

    При именах элементов в A2:A9, имен месяцев в B1:F1, целевого элемента в I1 и целевого месяца в I2, формула выглядит следующим образом:

    =VLOOKUP(I1, A2:F9, MATCH(I2, A1:F1, 0), FALSE)

    Как работает эта формула

    В основе формулы лежит стандартная функция VLOOKUP, которая ищет точное совпадение с искомым значением в I1. Но поскольку мы не знаем, в каком именно столбце находятся продажи за определенный месяц, мы не можем указать номер столбца непосредственно в формуле. col_index_num аргумент. Чтобы найти этот столбец, мы используем следующую функцию MATCH:

    MATCH(I2, A1:F1, 0)

    В переводе на английский язык формула гласит: найдите значение I2 в A1:F1 и верните его относительную позицию в массиве. Указав 0 в третьем аргументе, вы даете команду MATCH найти значение, точно равное искомому (это все равно, что использовать FALSE для параметра range_lookup аргумент VLOOKUP).

    Поскольку Мар находится в 4-м столбце массива поиска, функция MATCH возвращает 4, который переходит непосредственно к col_index_num аргумент VLOOKUP:

    VLOOKUP(I1, A2:F9, 4, FALSE)

    Обратите внимание, что хотя названия месяцев начинаются в столбце B, мы используем A1:I1 для массива поиска. Это сделано для того, чтобы число, возвращаемое MATCH, соответствовало позиции столбца в массив_таблиц VLOOKUP.

    Чтобы узнать больше способов выполнения матричного поиска в Excel, ознакомьтесь с формулой ИНДЕКС МАТЧА и другими формулами для двумерного поиска.

    Как сделать несколько Vlookup в Excel (вложенный Vlookup)

    Иногда может случиться так, что ваша основная таблица и таблица поиска не имеют ни одного общего столбца, что не позволяет вам выполнить Vlookup между двумя таблицами. Однако существует другая таблица, которая не содержит искомой информации, но имеет один общий столбец с основной таблицей и другой общий столбец с таблицей поиска.

    На рисунке ниже показана ситуация:

    Цель состоит в том, чтобы скопировать цены в основную таблицу на основе Идентификаторы предметов Проблема заключается в том, что таблица, содержащая цены, не имеет Идентификаторы предметов Это означает, что нам придется сделать два Vlookup в одной формуле.

    Для удобства давайте сначала создадим пару именованных диапазонов:

    • Таблица поиска 1 называется Продукция (D3:E10)
    • Таблица поиска 2 называется Цены ( G3:H10 )

    Таблицы могут находиться в одном или разных рабочих листах.

    А теперь мы выполним так называемый двойной Vlookup , он же вложенный Vlookup .

    Сначала создайте формулу VLOOKUP, чтобы найти название продукта в таблице поиска 1 (с именем Продукция ) на основе идентификатора элемента (A3):

    =VLOOKUP(A3, Products, 2, FALSE)

    Далее подставьте приведенную выше формулу в lookup_value аргумент другой функции VLOOKUP для извлечения цен из таблицы поиска 2 (с именем Цены ) на основе названия продукта, возвращенного вложенным VLOOKUP:

    =VLOOKUP(VLOOKUP(A3, Products, 2, FALSE), Prices, 2, FALSE)

    На скриншоте ниже показана наша вложенная формула Vlookup в действии:

    Как динамически выполнять Vlookup нескольких листов

    Иногда у вас могут быть данные в одном формате, разделенные на несколько рабочих листов. И ваша цель - извлечь данные из определенного листа в зависимости от ключевого значения в данной ячейке.

    Это легче понять на примере. Допустим, у вас есть несколько региональных отчетов о продажах в одном формате, и вы хотите получить данные о продажах конкретного продукта в определенных регионах:

    Как и в предыдущем примере, мы начинаем с определения нескольких имен:

    • Диапазон A2:B5 в листе CA имеет имя CA_Sales .
    • Диапазон A2:B5 в листе FL имеет имя FL_Sales .
    • Диапазон A2:B5 на листе KS имеет имя KS_Sales .

    Как вы можете видеть, все названные диапазоны имеют общую часть ( Продажи ) и уникальные части ( CA , FL , KS ). Пожалуйста, не забудьте назвать свои диапазоны аналогичным образом, так как это важно для формулы, которую мы собираемся построить.

    Формула 1. INDIRECT VLOOKUP для динамического извлечения данных из разных листов

    Если ваша задача - получить данные с нескольких листов, формула VLOOKUP INDIRECT является лучшим решением - компактным и простым для понимания.

    Для данного примера мы организуем сводную таблицу таким образом:

    • Введите интересующие вас продукты в A2 и A3. Это наши значения для поиска.
    • Введите уникальные части именованных диапазонов в B1, C1 и D1.

    А теперь мы конкатенируем ячейку, содержащую уникальную часть (B1), с общей частью ("_Sales") и передаем полученную строку в INDIRECT:

    INDIRECT(B$1&"_Sales")

    Функция INDIRECT преобразует строку в имя, понятное Excel, и вы помещаете его в файл массив_таблиц аргумент VLOOKUP:

    =VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)

    Приведенная выше формула переходит в B2, а затем вы копируете ее вниз и вправо.

    Обратите внимание, что в значении поиска ($A2) мы зафиксировали координату столбца абсолютной ссылкой на ячейку, чтобы столбец оставался фиксированным при копировании формулы вправо. В ссылке B$1 мы зафиксировали строку, потому что хотим, чтобы координата столбца менялась и снабжала ИНДИРЕКТ соответствующей именной частью в зависимости от столбца, в который копируется формула:

    Если ваша основная таблица организована по-другому, значения поиска в строке и уникальные части имен диапазона в столбце, то вы должны зафиксировать координату строки в значении поиска (B$1) и координату столбца в частях имен ($A2):

    =VLOOKUP(B$1, INDIRECT($A2&"_Sales"), 2, FALSE)

    Формула 2. VLOOKUP и вложенные IF для поиска нескольких листов

    В ситуации, когда у вас всего два или три листа поиска, вы можете использовать довольно простую формулу VLOOKUP с вложенными функциями IF для выбора нужного листа на основе ключевого значения в определенной ячейке:

    =VLOOKUP($A2, IF(B$1="CA", CA_Sales, IF(B$1="FL", FL_Sales, IF(B$1="KS", KS_Sales,"")), 2, FALSE)

    Где $A2 - значение поиска (имя элемента), а B$1 - ключевое значение (состояние):

    В этом случае не обязательно определять имена и можно использовать внешние ссылки для обращения к другому листу или рабочей книге.

    Примеры формул см. в разделе Как использовать VLOOKUP на нескольких листах в Excel.

    Вот как использовать VLOOKUP в Excel. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!

    Рабочая тетрадь для тренировок для скачивания

    Примеры расширенных формул VLOOKUP (файл.xlsx)

    Майкл Браун — увлеченный технологический энтузиаст, стремящийся упростить сложные процессы с помощью программных инструментов. Имея более чем десятилетний опыт работы в технологической отрасли, он отточил свои навыки в Microsoft Excel и Outlook, а также в Google Sheets и Docs. Блог Майкла посвящен тому, чтобы делиться своими знаниями и опытом с другими, предоставляя простые советы и учебные пособия для повышения производительности и эффективности. Являетесь ли вы опытным профессионалом или новичком, в блоге Майкла вы найдете ценную информацию и практические советы, которые помогут вам максимально эффективно использовать эти важные программные инструменты.