Глиф Учебники

Урок 6. Поиск в таблице: ВПР, ПРОСМОТРX, ИНДЕКС и ПОИСКПОЗ

Курс «Excel» · урок 6 из 10 · 4 минуты чтения

Частая задача: есть прайс-лист, а в заказе — только артикулы. Нужно подставить к каждому артикулу название и цену из прайса. Искать глазами в сотне строк долго и ненадёжно — это работа для функций поиска.

Пример для всего урока — прайс в A1:C5 и заказ рядом:

ABCDEF
1АртикулТоварЦенаЗаказЦена
21001Тетрадь1,201003
31002Ручка0,85
41003Карандаш0,40
51004Ластик0,55

ВПР

ВПР (вертикальный просмотр) ищет значение в первом столбце таблицы и возвращает значение из той же строки в нужном столбце:

Формула
=ВПР(искомое_значение;таблица;номер_столбца;интервальный_просмотр)

Цена для артикула из E2 — в F2:

Формула
=ВПР(E2;$A$2:$C$5;3;ЛОЖЬ)
АргументЗдесьЧто значит
искомое_значениеE2что ищем: артикул 1003
таблица$A$2:$C$5где ищем; искомое — в её первом столбце
номер_столбца3из какого столбца таблицы взять ответ: 3 — «Цена»
интервальный_просмотрЛОЖЬискать точное совпадение

Результат — 0,40. Если заменить 3 на 2, формула вернёт «Карандаш».

123 номер_столбца ABC 12345 АртикулТоварЦена 1001100210031004 ТетрадьРучкаКарандашЛастик 1,200,850,400,55 1 2 =ВПР(E2;$A$2:$C$5;3;ЛОЖЬ) E2 1003 ВПР F2 0,40 1 ищет 1003 в первом столбце 2 берёт 3-й столбец той же строки ЛОЖЬ — только точное совпадение
ВПР ищет артикул 1003 из E2 сверху вниз в первом столбце таблицы $A$2:$C$5, а из найденной строки берёт третий столбец — цену 0,40.

Таблица закреплена знаками $: формулу будут копировать вниз по заказу, а прайс должен оставаться на месте. Прайс на другом листе указывается так же, с именем листа: Прайс!$A$2:$C$100.

Последний аргумент пишите всегда. Если его пропустить, ВПР ищет приблизительное совпадение и на несортированных данных молча возвращает чужую строку. ЛОЖЬ (или 0) — точный поиск.

Если не нашлось. Введите в E2 артикул 1007, которого нет в прайсе, — ВПР вернёт #Н/Д («нет данных»). Вместо ошибки можно показать свой текст функцией ЕСНД:

Формула
=ЕСНД(ВПР(E2;$A$2:$C$5;3;ЛОЖЬ);"нет в прайсе")

Ограничения ВПР

ПРОСМОТРX

В Excel 2021, Excel 2024 и Microsoft 365 есть функция без этих недостатков — ПРОСМОТРX. В Excel 2016 и 2019 её нет: формула покажет ошибку #ИМЯ?. В LibreOffice Calc она появилась в версии 24.8.

Формула
=ПРОСМОТРX(искомое_значение;просматриваемый_массив;возвращаемый_массив;если_ничего_не_найдено)

Буква X в названии латинская. Проще всего набрать =ПРОСМ и выбрать функцию из подсказки клавишей Tab.

Та же цена:

Формула
=ПРОСМОТРX(E2;$A$2:$A$5;$C$2:$C$5;"нет в прайсе")

Вместо таблицы и номера столбца — два отдельных столбца: где искать и откуда брать ответ. Точное совпадение включено по умолчанию, а четвёртый аргумент сразу задаёт ответ на случай, когда ничего не нашлось.

Искать можно в любую сторону. Артикул по названию — столбец ответа левее столбца поиска:

Формула
=ПРОСМОТРX("Ластик";$B$2:$B$5;$A$2:$A$5)
ФормулаРезультат
=ПРОСМОТРX(E2;$A$2:$A$5;$C$2:$C$5;"нет в прайсе")0,40
=ПРОСМОТРX(1007;$A$2:$A$5;$C$2:$C$5;"нет в прайсе")нет в прайсе
=ПРОСМОТРX("Ластик";$B$2:$B$5;$A$2:$A$5)1004

Есть ещё два необязательных аргумента: режим сопоставления (0 — точно, −1 — точно или ближайшее меньшее, 1 — точно или ближайшее большее, 2 — с подстановочными знаками * и ?) и режим поиска (1 — сверху вниз, −1 — снизу вверх, то есть найти последнее совпадение).

ИНДЕКС и ПОИСКПОЗ

Связка двух функций работает в любой версии Excel и в LibreOffice Calc и умеет искать в любую сторону.

ПОИСКПОЗ находит номер позиции значения в столбце, ИНДЕКС возвращает значение по номеру позиции:

Формула
=ПОИСКПОЗ("Ластик";$B$2:$B$5;0)
=ИНДЕКС($A$2:$A$5;4)

Первая формула вернёт 4: «Ластик» — четвёртый в B2:B5. Ноль в конце — точное совпадение, как ЛОЖЬ в ВПР. Вторая вернёт 1004 — четвёртое значение в A2:A5. Вместе — артикул по названию:

Формула
=ИНДЕКС($A$2:$A$5;ПОИСКПОЗ("Ластик";$B$2:$B$5;0))

Результат — 1004. Читается так: «возьми из столбца артикулов значение в той позиции, где в столбце названий стоит "Ластик"». Столбцы можно переставлять и вставлять новые — формула не сломается.

AB 12345 АртикулТовар 1001100210031004 ТетрадьРучкаКарандашЛастик позиция 123 4 та же позиция 4 1 2 1 ПОИСКПОЗ("Ластик";$B$2:$B$5;0) номер позиции → 4 2 ИНДЕКС($A$2:$A$5;4) значение по номеру → 1004 ответ берётся левее столбца поиска
ПОИСКПОЗ находит «Ластик» на четвёртой позиции в B2:B5, а ИНДЕКС берёт четвёртое значение из A2:A5 — артикул 1004, который стоит левее столбца поиска.

Почему #Н/Д, хотя значение есть

Поиск по шкале

Приблизительный поиск полезен, когда ищут не точное значение, а интервал: скидка зависит от суммы заказа. Шкала должна быть отсортирована по возрастанию:

HI
1Сумма отСкидка
200%
31005%
450010%
Формула
=ВПР(320;$H$2:$I$4;2;ИСТИНА)

Результат — 5 %: ВПР берёт наибольшее значение, не превышающее 320, то есть строку «100».

=ВПР(320;$H$2:$I$4;2;ИСТИНА) → 5% 0% 5% 10% 0100500 320 наибольшее значение, не больше 320
Шкала скидок: от 0 — 0 %, от 100 — 5 %, от 500 — 10 %; сумма 320 попадает в отрезок от 100 до 500, и ВПР с ИСТИНА возвращает 5 %.

Коротко

Проверьте себя

1. Что вернёт =ВПР("Ручка";$B$2:$C$5;2;ЛОЖЬ) для прайса из урока?
2. Почему ВПР не может найти артикул по названию товара в этом прайсе?
3. Что вернёт =ПОИСКПОЗ("Ручка";B2:B5;0)?
4. Формула с ВПР возвращает #Н/Д, хотя артикул в прайсе виден. Какая причина наиболее вероятна?