В статье показано, как выполнять быстрый поиск с несколькими условиями в Excel с помощью ИНДЕКС и ПОИСКПОЗ.

Хотя Microsoft Excel предоставляет специальные функции для вертикального и горизонтального поиска, опытные пользователи обычно заменяют их комбинацией функций ПОИСКПОЗ и ИНДЕКС, которая во многих отношениях превосходит функции ВПР и ГПР. К примеру, если вам нужно искать два или более критерия в столбцах и строках. 

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

Как сделать поиск с несколькими условиями

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

Чтобы найти значение на основе нескольких критериев в отдельных столбцах, используйте эту общую формулу:

{=ИНДЕКС( диапазон_возврата; ПОИСКПОЗ (1; ( критерий1 = диапазон1 ) * ( критерий2 = диапазон2 ) * (…); 0))}

Где:

  • Диапазон_возврата — это диапазон, из которого возвращается значение.
  • Критерии1 , критерии2 , … – это условия, которые необходимо выполнить.
  • Диапазон1 , диапазон2 , … — это диапазоны, на которых должны проверяться соответствующие критерии.

Важное замечание! Это формула массива , и она должна быть введена через Ctrl + Shift + Enter. Появятся {фигурные скобки}, что является визуальным признаком формулы массива в Excel. Не пытайтесь вводить фигурные скобки вручную, это не сработает!

Эта формула представляет собой расширенную версию комбинации ИНДЕКС+ПОИСКПОЗ, которая возвращает совпадение на основе одного критерия. Чтобы оценить несколько условий, мы используем операцию умножения, которая работает как оператор «И» в формулах массива . Ниже вы найдете реальный пример и подробное пошаговое объяснение логики расчетов.

ИНДЕКС ПОИСКПОЗ поиск по нескольким столбцам – пример формулы

В этом примере мы будем использовать таблицу с комбинацией критериев (в нашем случае регион-месяц-товар) в каждой строке. Наша цель — получить данные о продажах определенного товара в данном регионе и в нужном месяце.

Вот наши исходные данные и критерии:

  • Диапазон_возврата (продажи) — D2:D13
  • Критерий1 (целевой регион) – G1
  • Критерий2 (целевой месяц) – G2
  • Критерий 3 (целевой товар) — G3
  • Диапазон1 (регионы) – A2:A13
  • Диапазон2 (месяцы) – B2:B13
  • Диапазон3 (товары) – C2:C13

Формула принимает следующий вид:

=ИНДЕКС(D2:D13; ПОИСКПОЗ(1; (G1=A2:A13)*(G2=B2:B13)*(G3=C2:C13); 0))

Запишем формулу в G4, завершим ее, нажав Ctrl+Shift+Enter. Получаем следующий результат:

ИНДЕКС ПОИСКПОЗ поиск по нескольким столбцам

Как это работает? Разберем пошагово.

Самая сложная часть — это функция ПОИСКПОЗ, так что давайте пошагово рассмотрим логику ее работы:

ПОИСКПОЗ(1; (G1=A2:A13)*(G2=B2:B13)*(G3=C2:C13)

Как вы помните, ПОИСКПОЗ ищет заданное значение в массиве и возвращает относительное его положение в этом массиве.

В нашей формуле аргументы следующие:

  • Искомое_значение : 1
  • Массив поиска : (G1=A2:A13) * (G2=B2:B13) * (G3=C2:C13)
  • Тип_соответствия : 0

Шаг 1.

Первый аргумент предельно ясен - функция ищет число 1. Третий аргумент, установленный в 0, означает "точное совпадение", т.е. формула возвращает первое найденное значение, которое точно равно искомому значению.

Вопрос в том, почему мы ищем «1»? Чтобы получить ответ, давайте внимательнее посмотрим на массив поиска, где мы сравниваем каждый наш критерий с соответствующим диапазоном: целевой регион в ячейке G1 со всеми регионами (A2: A13), целевой месяц в G2 со всеми месяцами (B2: B13), и товар в G3 в колонке товаров (C2:C13). В результате этих сравнений мы имеем 3 массива значений ИСТИНА и ЛОЖЬ, где ИСТИНА представляет значения, соответствующие условию. Чтобы визуализировать это, вы можете выбрать отдельное выражение в формуле и нажать клавишу F9 , чтобы увидеть, что оно возвращает:

=ИНДЕКС(D2:D13; ПОИСКПОЗ(1; {ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА}*{ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ИСТИНА:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ}*{ЛОЖЬ:ИСТИНА:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ИСТИНА}; 0))

Шаг 2.

Операция умножения преобразует значения ИСТИНА и ЛОЖЬ в 1 и 0 соответственно:

{0:0:0:0:0:0:1:1:1:1:1:1}*{0:0:1:0:0:1:1:1:0:0:0:0}*{0:1:0:1:0:1:0:1:0:1:0:1}

Шаг 3.

А поскольку умножение на 0 всегда дает 0, результирующий массив содержит 1 только в тех строках, которые соответствуют всем трём условиям:

{0:0:0:0:0:0:0:1:0:0:0:0}

Приведенный выше массив переходит в аргумент массив_поиска функции ПОИСКПОЗ. Функция возвращает порядковый номер позиции с цифрой 1, для которой все критерии имеют значение ИСТИНА (строка 8 в нашем случае). Если в массиве будет несколько единиц, будет определена позиция только первой из них.

Шаг 4.

Число, возвращаемое функцией ПОИСКПОЗ, поступает непосредственно в аргумент номер_строки функции ИНДЕКС(массив, номер_строки, [номер_столбца]):

=ИНДЕКС(D2:D13, 8)

И это дает результат 680, что является восьмым по счету значением в массиве D2:D13.

Формула ИНДЕКС ПОИСКПОЗ без массива с несколькими критериями

Формула массива, рассмотренная в предыдущем примере, хорошо работает для опытных пользователей. Но если вы строите формулу для кого-то другого, и этот кто-то не знает о работе с формулами массива в Excel, то он может непреднамеренно ее сломать. Например, пользователь может щелкнуть вашу формулу, чтобы изучить ее, а затем нажать Enter вместо Ctrl + Shift + Enter. 

В таких случаях было бы разумно избегать массивов и использовать обычную формулу, которая является более сложной, но зато и более защищенной от случайной «поломки»:

ИНДЕКС( диапазон_возврата; ПОИСКПОЗ (1; ИНДЕКС(( критерий1 = диапазон1 ) * ( критерий2 = диапазон2 ) * (..); 0; 1); 0))

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

=ИНДЕКС(D2:D13; ПОИСКПОЗ(1; ИНДЕКС((G1=A2:A13) * (G2=B2:B13) * (G3=C2:C13); 0; 1); 0))

ИНДЕКС ПОИСКПОЗ с несколькими критериями без формулы массива

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

Поскольку функция ИНДЕКС умеет работать с массивами, мы добавляем еще один ИНДЕКС для обработки массива единиц и нулей, созданного путем умножения двух или более массивов ИСТИНА/ЛОЖЬ. Второй ИНДЕКС настроен с аргументом номер_строки равным нулю, чтобы формула возвращала весь столбец, а не одно значение. Поскольку в любом случае это массив из одного столбца, мы можем безопасно поставить 1 для номер_столбца :

ИНДЕКС({0:0:0:0:0:0:0:1:0:0:0:0};0, 1)  возвращает {0:0:0:0:0:0:0:1:0:0:0:0}

Этот массив передается в функцию ПОИСКПОЗ:

ПОИСКПОЗ(1; {0:0:0:0:0:0:0:1:0:0:0:0}; 0)

ПОИСКПОЗ находит номер позиции, для которого все условия – ИСТИНА (точнее, ищет относительное положение цифры «1» в указанном массиве), и передает номер этой позиции в аргумент номер_строки первого ИНДЕКС:

=ИНДЕКС(D2:D13, 8)

Ну и далее получаем нужный результат.

ИНДЕКС ПОИСКПОЗ с несколькими условиями в нескольких строках и столбцах

В этом примере показано, как выполнять поиск, проверяя два или более критерия в строках и столбцах. На самом деле это более сложный случай так называемого «матричного поиска» или «двустороннего поиска» с более чем одной строкой заголовка.

Вот общая формула ИНДЕКС ПОИСКПОЗ с несколькими критериями в строках и столбцах:

{=ИНДЕКС( массив_таблицы ; ПОИСКПОЗ( значение_поиска ; столбец_поиска ; 0); ПОИСКПОЗ( значение_поиска1 & значение_поиска2 ; строка_поиска1 & строка_поиска2 ; 0))}

где:

Массив таблицы — область для поиска, т. е. все значения таблицы, кроме заголовков столбцов и строк.

Значение_поиска — то, что вы ищете по вертикали в столбце.

Столбец_поиска — диапазон столбцов для поиска, обычно это заголовки строк.

Значение_поиска1, значение_поиска2, … — то, что вы ищете по горизонтали в строках.

Строка_поиска1, строка_поиска2, … — диапазоны строк для поиска, обычно это заголовки столбцов.

Важное замечание! Чтобы формула работала корректно, ее нужно вводить как формулу массива  при помощи комбинации Ctrl + Shift + Enter.

Это разновидность классической формулы двустороннего поиска в массиве, которая ищет значение на пересечении определенной строки и столбца. Разница в том, что вы объединяете несколько значений и диапазонов поиска для оценки нескольких заголовков столбцов. Чтобы лучше понять логику ее работы, рассмотрим небольшой пример.

В приведенной ниже таблице мы будем искать значение на основе заголовков строк (элементы) и заголовков двух столбцов (регионы и поставщики). То есть, ищем по одному условию по строкам и по двум условиям – по столбцам. Чтобы упростить построение формулы, давайте сначала определим все критерии и диапазоны:

  • Массив_таблицы - B3:E4
  • Значение_поиска  — H1
  • Столбец_поиска  (заголовки строк: товары) — A3:A5
  • Значение_поиска1  (целевой регион) — H2
  • Значение_поиска 2 (целевой продавец) — H3
  • Строка_поиска1 (заголовки столбцов 1: регионы) — B1:E1
  • Строка_поиска2 (заголовки столбцов 2: продавцы) — B2:E2

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

=ИНДЕКС(B3:E5; ПОИСКПОЗ(H1;A3:A5;0); ПОИСКПОЗ(H2&H3; B1:E1&B2:E2; 0))

Не забудьте завершить формулу, нажав комбинацию клавиш Ctrl + Shift + Enter, после чего поиск по матрице с несколькими условиями будет выполнен успешно:

Поиск ИНДЕКС ПОИСКПОЗ с несколькими условиями в нескольких строках и столбцах

Пошагово рассмотрим, как работает эта формула.

Поскольку мы ищем и по вертикали, и по горизонтали, то нужно указать номера строк и столбцов для функции ИНДЕКС (массив, номер_строки, номер_столбца).

Шаг 1.

Номер_строки предоставляется функцией ПОИСКПОЗ(H1;A3:A5;0), которая сравнивает целевой элемент (бананы) в H1 с заголовками строк в A3:A5. 

ПОИСКПОЗ("Бананы";{"Апельсины":"Бананы":"Лимоны"};0)

Это дает результат 2, потому что «Бананы» — это второй элемент в указанном списке.

Шаг 2.

Номер_столбца вычисляется путем объединения двух значений поиска и двух массивов поиска: ПОИСКПОЗ(H2&H3; B1:E1&B2:E2; 0)

Необходимым условием является то, что значения поиска должны точно соответствовать заголовкам столбцов и быть объединены в том же порядке. Чтобы проследить процесс поиска, выберите первые два аргумента в формуле ПОИСКПОЗ, затем нажмите F9, и вы увидите, что оценивает каждый аргумент:

ПОИСКПОЗ("СеверПродавец 2"; {"СеверПродавец 1";"СеверПродавец 2";"ЮгПродавец 1";"ЮгПродавец 2"}; 0)

Поскольку « СеверПродавец 2» является вторым элементом в массиве, функция возвращает 2.

Шаг 3.

После этого наша длинная двумерная формула ИНДЕКС ПОИСКПОЗ превращается в такую простую:

=ИНДЕКС(B3:E5; 2; 2)

Шаг 4.

Она возвращает значение на пересечении 2-й строки и 2-го столбца в диапазоне B3:E5, что является значением в ячейке C4.

Вот как формула ИНДЕКС ПОИСКПОЗ помогает выполнить поиск по нескольким условиям в Excel. Я благодарю вас за чтение и надеюсь вновь увидеть вас в нашем блоге.