Как сделать ВПР для двух таблиц: перенести цену по артикулу, закрепить диапазон и найти причины ошибки #Н/Д. Готовая формула Excel и небольшой пример.
Марина
Контент-маркетолог LibraChat
8 мин чтения
Цена фонаря нашлась в другой строке, и это было нормально. Заказ начинался с модели L-330, справочник — с L-021. Чтобы сделать ВПР для двух таблиц, мне не пришлось переставлять строки: формула нашла совпавший артикул и вернула цену из его записи. Покажу этот пример целиком, от исходных ячеек до копирования формулы вниз. Важны четыре вещи: код слева в справочнике, номер возвращаемого столбца, точное совпадение и закреплённый диапазон.
Раньше я бы открыла оба листа рядом и переносила цены по одной. На четырёх строках это ещё терпимо. Но при изменении порядка легко принести соседнюю цену, а после обновления прайса придётся повторять ручной поиск. Поэтому в тот день я решила связать записи по коду.
Утром: как подготовить таблицы, чтобы сделать ВПР
В моей книге два листа: «Справочник» и «Заказ». Для примера взяла четыре условные модели фонарей. Цены здесь нужны для вычислений, а не для выбора товара на рынке.
На листе «Справочник» заголовки стоят в A1:C1, данные — в A2:C5:
На листе «Заказ» заголовки находятся в A1:C1. В A2:A4 записаны нужные артикулы, в B2:B4 количества. Столбец C пока пустой:
A: Артикул · B: Количество · C: Цена за штуку
L-330 — 2 — Пока пусто
L-021 — 1 — Пока пусто
L-104 — 3 — Пока пусто
Артикул здесь общий ключ: по нему мы узнаём одну и ту же модель в двух местах. Название я для поиска не использую. «Карманный» может встретиться у нескольких товаров, а уникальный код должен указывать на определённую запись.
Я проверила левую границу справочника до формулы. Microsoft указывает: ВПР ищет в первом столбце выбранного диапазона, а не в любом удобном столбце листа. В нашем случае диапазон начинается с A, поэтому код действительно окажется первым.
Если коды выглядят одинаково, но ВПР возвращает #Н/Д, пригодится разбор пробелов и чисел, записанных текстом. В этой статье я разбираю адреса для самой формулы: где код, где цена и куда должен попасть результат.
До обеда: как сделать ВПР, когда таблицы готовы
В ячейке C2 листа «Заказ» я использую такую формулу:
```excel
=ВПР(A2;Справочник!$A$2:$C$5;3;ЛОЖЬ)
```
Эта запись рассчитана на русский Excel, который разделяет аргументы точкой с запятой. Для варианта с английскими именами функций и разделителем-запятой наш пример будет выглядеть так: `=VLOOKUP(A2,Справочник!$A$2:$C$5,3,FALSE)`. Сохраняются четыре аргумента: код L-330, источник A2:C5, столбец 3 и точное совпадение.
Разберём формулу по частям:
`A2` — код, который ищем. Здесь это L-330 из текущей строки заказа.
`Справочник!$A$2:$C$5` — прямоугольник поиска на другом листе. Он содержит и коды, и цены.
`3` — вернуть значение из третьего столбца выбранного прямоугольника, то есть из C.
`ЛОЖЬ` — искать точное совпадение кода.
Для первой строки ожидаем 910. Сначала находится L-330 в первом столбце справочника, затем берётся цена из той же строки. Количество 2 не участвует в ВПР: мы переносим цену за штуку, а не стоимость двух фонарей.
Если нужна сумма строки заказа, её можно посчитать отдельно в D2 формулой `=B2*C2`. Тогда для первой записи получится 1820. Я предпочитаю подписывать обе колонки явно, чтобы число 910 не приняли за общую сумму заказа.
Есть ловушка в словах «третий столбец». Отсчёт идёт от левого края аргумента таблицы. Если диапазон начинается с B, его первый столбец — B, второй — C. Номер 3 не означает букву C независимо от выбранного диапазона.
И ещё одно условие я не опускаю: `ЛОЖЬ`. По документации Microsoft пропущенный последний аргумент означает приблизительный поиск. Он нужен для других задач, например для интервалов в отсортированной шкале. Коды моделей не образуют такую шкалу: соседний похожий артикул меня не устраивает.
После обеда: копирую формулу, сохраняя справочник
Первое найденное значение я сопоставила с исходной строкой. Потом перешла к остальным двум позициям. Здесь важно, чтобы менялся код текущего заказа, а источник оставался на месте.
Знаки доллара закрепляют обе координаты границ справочника. При копировании C2 в C3 ссылка A2 станет A3, но `$A$2:$C$5` сохранится. Получится:
```excel
=ВПР(A3;Справочник!$A$2:$C$5;3;ЛОЖЬ)
```
Для L-021 результатом будет 590. Следующая строка с L-104 должна получить 760. Разный порядок листов по-прежнему не мешает: формула каждый раз ищет код заново.
Моя последовательность заполнения такая:
Выделить C2 и ввести формулу со знаком равенства.
Нажать Enter и сопоставить первую цену со справочником.
Снова выделить C2 и потянуть маркер заполнения за правый нижний угол до C4.
Посмотреть формулу в C3: меняется адрес заказа, диапазон справочника закреплён.
Проверить цены в последней заполненной строке.
Я попробовала представить тот же перенос без долларов. При копировании вниз диапазон начал бы сдвигаться: A2:C5 превратился бы в A3:C6. Первая запись справочника выпала бы из поиска. Именно поэтому одна удачная формула вверху ещё не означает, что вниз скопировалось то, что мы задумали.
Закрепление не делает диапазон бесконечным. Если добавить пятую модель в строку 6, наша запись до строки 5 её не увидит. Нужно расширить источник в формуле либо заранее организовать справочник как таблицу Excel и использовать её ссылки. Для маленького примера я оставляю обычный диапазон, чтобы были видны его границы.
Перед рассылкой: разбираю ошибку, а не закрашиваю её
Теперь в заказе появляется L-700. В нашем справочнике такого кода нет. При точном поиске ожидается ошибка #Н/Д. Она сообщает о ненайденном совпадении, а не назначает товару нулевую цену.
Я не начинаю с замены всех ошибок пустотой. Иначе отсутствующая запись станет похожа на незаполненную или бесплатную позицию. Сначала нужно понять, чего именно не хватает.
При #Н/Д проверяю следующее:
Артикул действительно есть в первом столбце выбранного диапазона?
Не находится ли новая строка ниже указанной нижней границы?
Совпадают ли символы кода, включая пробелы и вид дефиса?
Не хранится ли числовой ключ в одном месте как текст, а в другом как число?
Наши коды содержат букву, поэтому я сохраняю их обозначениями. Если другой справочник использует ведущие нули, не убирай их просто ради исчезновения ошибки: сначала уточни, являются ли они частью кода.
Ещё я смотрю, уникален ли ключ. Когда одному артикулу соответствуют две разные цены, ВПР не объяснит, какая из них действующая. Нужно привести сам справочник в порядок или добавить другой однозначный ключ. Молчаливый выбор подходящей суммы под ожидание заказчика здесь только запутает данные.
Если в результате оказалось название вместо цены, вернись к номеру столбца. Если ошибка относится к диапазону, проверь, входит ли возвращаемый столбец в указанный прямоугольник. Не все неполадки исправляются изменением последнего аргумента.
К отправке: оставляю понятную связь между листами
В результате у каждой строки заказа есть свой код и цена за штуку из определённого справочника. Я могу поменять порядок строк заказа, не перекладывая цены руками. При обновлении исходных цен после пересчёта изменится и результат: формула продолжает ссылаться на источник.
Для разбора одной формулы хватит названий листов и нескольких примерных строк. Если регулярно передаёшь целые книги, соотнеси эту работу с доступными режимами и тарифами. Допустимый размер вложения проверь после входа. Если файл не принимается, передай небольшой фрагмент с заголовками: по нему можно обсудить расположение кодов и нужного значения, не восстанавливая устройство листа по памяти.
Работаю в Excel. На листе [название] код находится в [столбец], нужное значение в [столбец], данные занимают [диапазон]. На листе заказа код стоит в [ячейка]. Моя формула: [вставь запись]. Объясни четыре аргумента ВПР и покажи, что изменится при копировании на одну строку вниз. Если кода нет, не подставляй похожую запись. Не придумывай адреса, которых я не указала.
Перед отправкой заказа задай себе вопрос: что произойдёт, если появится неизвестный артикул? Для нашего примера ответ определён — #Н/Д, затем уточнение справочника. Когда это поведение понятно заранее, формула становится частью рабочего процесса, а не случайно найденной ценой в одной клетке.