К содержанию

Модуль 4 · Урок 4.2

Поиск по ключу

Ключ и справочник, ВПР с точным совпадением, ИНДЕКС и ПОИСКПОЗ, ошибка #Н/Д.

7 задач

В продаже записаны только код товара и число упаковок, а категория и масса лежат на другом листе — в справочнике. Чтобы посчитать продажи напитков, к каждой продаже нужно «подтянуть» категорию. ВПР находит по ключу строку справочника и возвращает из неё нужное поле.

Разберём ключ и справочник, функции ВПР, ИНДЕКС и ПОИСКПОЗ и ошибку #Н/Д.

Справочник и ключ

Свойства товара хранят один раз в справочнике, а в операциях — только ключ. Если в каждой продаже повторять название, массу и категорию, файл разрастётся, а исправлять придётся в сотне мест. Поэтому в операции пишут только код товара и сведения о самой продаже.

Код, позволяющий однозначно найти запись справочника, называется ключом. Например, код товара 101 связывает строку продажи со строкой «Чай» в таблице товаров. Номер строки на листе ключом не является: после сортировки положение записи может измениться.

Лист «Товары» содержит четыре записи, лист «Магазины» — коды 1, 2, 3: магазины 1 и 3 находятся в Северном районе, магазин 2 — в Южном. Переключай листы под сеткой:

A3102
Лист «Товары»
ABCD
1КодНазваниеКатегорияМасса упаковки, г
2101ЧайНапитки100
3102КофеНапитки250
4103ПеченьеВыпечка200
5104КакаоНапитки150
Лист «Магазины»
AB
1Код магазинаРайон
21Северный
32Южный
43Северный

Связь имеет вид «много операций могут относиться к одному товару». Поэтому повторение кода в операциях нормально, а в справочнике товаров код должен обозначать одну определённую запись. Если в справочнике один код связан с разными свойствами, обычный поиск первой строки не разрешит противоречие.

ВПР

ВПР(ключ; справочник; номер столбца; 0) ищет ключ в первом столбце справочника и берёт значение из указанного столбца той же строки. Название значит «вертикальный поиск».

=ВПР(B2;Товары!$A$2:$D$5;3;0)

B2 — код товара из операции. Товары! указывает другой лист. $A$2:$D$5 — закреплённый диапазон справочника. 3 означает третий столбец внутри этого диапазона, то есть категорию. 0 задаёт точное совпадение; вместо него можно использовать ЛОЖЬ.

Вот что ВПР делает, когда в B2 код 103:

  1. Справочник — диапазон Товары!$A$2:$D$5. Внутри него столбцы считаются с единицы: A — 1-й, B — 2-й, C — 3-й, D — 4-й. Ключ 103 ищется только в 1-м.
  2. A2: 101 — не 103, ВПР спускается ниже.
  3. A3: 102 — не 103, ВПР спускается ниже.
  4. A4: 103 — совпадение. Строка 4 листа — 3-я строка справочника.
  5. В найденной строке ВПР берёт 3-й столбец диапазона — C4: Выпечка. Четвёртый аргумент 0 требует точного совпадения ключа.
E3=ВПР(B3;Товары!$A$2:$D$5;3;0)
Лист «Операции»
ABCDEF
1ДатаКодМагазинУпаковокКатегорияРайон
201.10.2026101110НапиткиСеверный
301.10.202610316ВыпечкаСеверный
402.10.202610222НапиткиЮжный
502.10.202610435НапиткиСеверный
Лист «Товары»
ABCD
1КодНазваниеКатегорияМасса, г
2101ЧайНапитки100
3102КофеНапитки250
4103ПеченьеВыпечка200
5104КакаоНапитки150
Лист «Магазины»
AB
1Код магазинаРайон
21Северный
32Южный
43Северный
Формулы в ячейках листа «Операции»На листах «Товары» и «Магазины» формул нет — только данные.
  • E2скопирована до E5=ВПР(B2;Товары!$A$2:$D$5;3;0)
  • F2скопирована до F5=ВПР(C2;Магазины!$A$2:$B$4;2;0)

Выбери E3: формула ищет код 103, и вкладка «Товары» отмечена цветом — справочник лежит там. Перейди на неё: рамка стоит на всём диапазоне A2:D5. Поменяй код в B3 на 102 — категория станет «Напитки».

Диапазон справочника удобнее выделить мышью на другом листе — Excel сам впишет ссылку с именем листа. Четвёртый аргумент 0 не пропускай: без него поиск приближённый.

Тонкости:имя листа с пробелом и приближённый поиск

Имя листа с пробелом берут в одинарные кавычки: 'Каталог товаров'!$A$2:$D$5.

Без 0 (или с ИСТИНА) ВПР ищет приближённо: при отсутствии ключа берёт ближайший меньший, а первый столбец должен быть отсортирован. Это нужно, например, для выбора тарифа по интервалу; для кода товара нужен точно тот же код.

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

ПОИСКПОЗ находит номер позиции ключа, ИНДЕКС берёт элемент по номеру; вместе они ищут в любую сторону. ПОИСКПОЗ(B2;Товары!$A$2:$A$5;0) возвращает позицию кода внутри диапазона. Если найден третий элемент, результат равен 3, даже если на листе он находится в строке 4. Это относительная позиция в указанном списке.

ИНДЕКС(Товары!$C$2:$C$5;3) возвращает третий элемент столбца категорий. Объединив операции, получаем:

=ИНДЕКС(Товары!$C$2:$C$5;ПОИСКПОЗ(B2;Товары!$A$2:$A$5;0))

Внутренняя ПОИСКПОЗ вычисляется первой и отдаёт ИНДЕКС номер. При коде 103 в B2:

  1. ИНДЕКС, внутри неё ПОИСКПОЗ.
  2. Ключ из B2 подставлен: 103.
  3. ПОИСКПОЗ нашла 103 третьим в списке кодов 101, 102, 103, 104 — на её месте число 3.
  4. ИНДЕКС берёт третий элемент столбца категорий: Выпечка.
C2=ИНДЕКС(Товары!$C$2:$C$5;B2)
Лист «Позиция»
ABC
1КодПозиция в списке кодовКатегория по позиции
21033Выпечка
3Печенье3103
Лист «Товары»
ABCD
1КодНазваниеКатегорияМасса, г
2101ЧайНапитки100
3102КофеНапитки250
4103ПеченьеВыпечка200
5104КакаоНапитки150
Формулы в ячейках листа «Позиция»На листе «Товары» формул нет — только данные.
  • B2=ПОИСКПОЗ(A2;Товары!$A$2:$A$5;0)
  • B3=ПОИСКПОЗ(A3;Товары!$B$2:$B$5;0)
  • C2=ИНДЕКС(Товары!$C$2:$C$5;B2)
  • C3=ИНДЕКС(Товары!$A$2:$A$5;B3)

Во второй строке поиск идёт по названию, а возвращается код — столбец левее столбца поиска. ВПР так не умеет.

ВПР требует, чтобы ключ был первым столбцом диапазона, а пара ИНДЕКС и ПОИСКПОЗ ищет в любую сторону.

Тонкости:ПРОСМОТРX

В новых версиях Excel есть ПРОСМОТРX — она тоже ищет в любую сторону. Курс без неё обходится: в старых версиях и на экзамене её может не быть.

Ошибка #Н/Д

#Н/Д — ключа нет в справочнике; это повод проверить данные, а не заменить ошибку нулём. Проверь сам код, его тип, пробелы, границы диапазона и опечатки. Не заменяй ошибку нулём: неизвестная масса — не масса ноль, а отсутствие цены — не бесплатный товар.

B2=ВПР(A2;Товары!$A$2:$D$5;4;0)
Лист «Нет»
AB
1КодМасса
2105#Н/Д
3102#Н/Д
4102250
Лист «Товары»
ABCD
1КодНазваниеКатегорияМасса, г
2101ЧайНапитки100
3102КофеНапитки250
4103ПеченьеВыпечка200
5104КакаоНапитки150
Формулы в ячейках листа «Нет»На листе «Товары» формул нет — только данные.
  • B2=ВПР(A2;Товары!$A$2:$D$5;4;0)
  • B3=ВПР(A3;Товары!$A$2:$D$5;4;0)
  • B4=ВПР(A4;Товары!$A$2:$D$5;4;0)

Кода 105 в справочнике нет. А в A3 код записан текстом '102: на вид тот же, но число 102 и текст «102» для поиска разные значения.

Поиск и условная сумма

ВПР извлекает свойство одной записи, а итог по многим записям считает условная сумма. Сложить все продажи товара — задача условной суммы по операциям, а не поиска.

Свойство, найденное ВПР, становится обычным столбцом — по нему можно отбирать. Сколько упаковок напитков продано, если категория записана только в справочнике:

F2=СУММЕСЛИ(C2:C5;"Напитки";B2:B5)
Лист «Итог»
ABCDEF
1КодУпаковокКатегорияВопросОтвет
210110Напиткиупаковок напитков17
31036Выпечкаопераций с напитками3
41022Напитки
51045Напитки
Лист «Товары»
ABC
1КодНазваниеКатегория
2101ЧайНапитки
3102КофеНапитки
4103ПеченьеВыпечка
5104КакаоНапитки
Формулы в ячейках листа «Итог»На листе «Товары» формул нет — только данные.
  • C2скопирована до C5=ВПР(A2;Товары!$A$2:$C$5;3;0)
  • F2=СУММЕСЛИ(C2:C5;"Напитки";B2:B5)
  • F3=СЧЁТЕСЛИ(C2:C5;"Напитки")

Упаковок 17, а операций 3: обе величины считаются по одной выборке, но отвечают на разные вопросы.

Итог

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

  • КлючОднозначно указывает запись справочника; номер строки ключом не является.
  • ВПР=ВПР(ключ;Лист!$A$2:$D$5;столбец;0): ключ в первом столбце, 0 — точное совпадение.
  • ИНДЕКСИНДЕКС(столбец;ПОИСКПОЗ(ключ;ключи;0)) ищет и влево.
  • #Н/ДКлюча нет: проверь код, тип и пробелы, а не ставь 0.
  • ИтогНайденное свойство — обычный столбец для СУММЕСЛИ и СЧЁТЕСЛИ.

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

Ответь сначала сам, потом открой ответ.

Вопрос 1

Код 102 находится в B2. В справочнике Товары!A2:D5 столбец D — масса упаковки. Напиши точный поиск массы и объясни аргумент номера столбца.

ОтветСкрыть ответ
Ответ

=ВПР(B2;Товары!$A$2:$D$5;4;0). Столбец массы — четвёртый именно внутри A:D. Для кода 102 результат равен 250 г.

Вопрос 2

Почему при копировании формулы ВПР вниз справочник нужно закрепить знаком $?

ОтветСкрыть ответ
Ответ

Иначе при копировании диапазон справочника сдвинется вниз и потеряет первые записи.

Вопрос 3

Код в операции записан как «102 » с пробелом в конце. Что вернёт ВПР и как это исправить?

ОтветСкрыть ответ
Ответ

#Н/Д: «102 » — текст с пробелом, не равный числу 102. Убрать пробел (СЖПРОБЕЛЫ) и превратить в число (ЗНАЧЕН).

Вопрос 4

Зачем нужен четвёртый аргумент 0 у ВПР, если коды в справочнике и так уникальны?

ОтветСкрыть ответ
Ответ

Без него ВПР ищет приближённо: при отсутствии кода вернёт свойство соседнего меньшего кода вместо ошибки.

Вопрос 5

Найди название товара по массе 150, если масса стоит в столбце D, а название — в B. Почему здесь не подходит ВПР?

ОтветСкрыть ответ
Ответ

=ИНДЕКС(Товары!$B$2:$B$5;ПОИСКПОЗ(150;Товары!$D$2:$D$5;0)) — «Какао». ВПР ищет только в первом столбце диапазона и возвращает столбцы правее.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Номер столбца для ВПР

Справочник лежит в Товары!C10:F40, ключ — в столбце C, категория — в столбце E. Какой номер столбца передать ВПР?

Введите число.

ВПР массы

Справочник урока Товары!A2:D5: коды 101–104, названия Чай, Кофе, Печенье, Какао, категории Напитки, Напитки, Выпечка, Напитки, масса 100, 250, 200, 150. Что вернёт =ВПР(103;Товары!$A$2:$D$5;4;0)?

Введите число.

Кода нет

Справочник урока Товары!A2:D5: коды 101–104, названия Чай, Кофе, Печенье, Какао, категории Напитки, Напитки, Выпечка, Напитки, масса 100, 250, 200, 150. Что вернёт =ВПР(105;Товары!$A$2:$D$5;3;0)?

Введите ответ так, как его покажет Excel.

ПОИСКПОЗ

Справочник урока Товары!A2:D5: коды 101–104, названия Чай, Кофе, Печенье, Какао, категории Напитки, Напитки, Выпечка, Напитки, масса 100, 250, 200, 150. Что вернёт =ПОИСКПОЗ(104;Товары!$A$2:$A$5;0)?

Введите число.

ИНДЕКС

Справочник урока Товары!A2:D5: коды 101–104, названия Чай, Кофе, Печенье, Какао, категории Напитки, Напитки, Выпечка, Напитки, масса 100, 250, 200, 150. Что вернёт =ИНДЕКС(Товары!$B$2:$B$5;2)?

Введите текст без кавычек.

Упаковки напитков

Операции с кодами 101, 101, 104 и 103 и количествами 2, 3, 4 и 5; категорию находят по справочнику урока (101 и 104 — напитки, 103 — выпечка). Сколько упаковок напитков продано?

Введите число.

Операции с напитками

По тем же операциям: сколько было операций с напитками?

Введите число.