Поиск последнего вхождения (инвертированный ВПР)
Все классические функции поиска и подстановки типа ВПР (VLOOKUP), ГПР (HLOOKUP), ПОИСКПОЗ (MATCH) и им подобные имеют одну важную особенность — они ищут от начала к концу, т.е. слева-направо или сверху-вниз по исходным данным. Как только находится первое подходящее совпадение — поиск останавливается и найденным оказывается только первое вхождение нужного нам элемента.
Что же делать, если нам требуется найти не первое, а последнее вхождение? Например, последнюю сделку по клиенту, последний платёж, самую свежую заявку и т.д.?
Способ 1. Поиск последней строки формулой массива
Если в исходной таблице нет столбца с датой или порядковым номером строки (заказа, платежа…), то наша задача сводится, по сути, к поиску последней строки, удовлетворяющей заданному условию. Реализовать подобное можно вот такой формулой массива:
Здесь:
- Функция ЕСЛИ (IF) проверяет по очереди все ячейки в столбце Клиент и выводит номер строки, если в ней лежит нужное нам имя. Номер строки на листе нам даёт функция СТРОКА (ROW), но поскольку нам нужен номер строки в таблице, то дополнительно приходится вычитать 1, т.к. у нас в таблице есть шапка.
- Затем функция МАКС (MAX) выбирает из сформированного набора номеров строк максимальное значение, т.е. номер самой последней строки клиента.
- Функция ИНДЕКС (INDEX) выдаёт содержимое ячейки с найденным последним номером из любого другого требуемого столбца таблицы (Код заказа).
Всё это нужно вводить как формулу массива, т.е.:
- В Office 365 с последними установленными обновлениями и поддержкой динамических массивов — можно просто жать Enter.
- Во всех остальных версиях после ввода формулы придется нажимать сочетание клавиш Ctrl+Shift+Enter, что автоматически добавит к ней фигурные скобки в строке формул.
Способ 2. Обратный поиск новой функцией ПРОСМОТРХ
Я уже писал большую статью с видео про новую функцию ПРОСМОТРХ (XLOOKUP), которая появилась в последних версиях Office на замену старушке ВПР (VLOOKUP). При помощи ПРОСМОТРХ наша задача решается совершенно элементарно, т.к. для этой функции (в отличие от ВПР) можно явно задавать направление поиска: сверху-вниз или снизу-вверх — за это отвечает её последний аргумент (-1):
Способ 3. Поиск строки с последней датой
Если в исходных данных у нас есть столбец с порядковым номером или датой, играющей аналогичную роль, то задача видоизменяется — нам требуется найти уже не последнюю (самую нижнюю) строку с совпадением, а строку с самой поздней (максимальной) датой.
Как это сделать с помощью классических функций я уже подробно разбирал, а теперь давайте попробуем использовать мощь новых функций динамических массивов. Исходную таблицу для пущей красоты и удобства тоже заранее преобразуем в «умную» с помощью сочетания клавиш Ctrl+T или команды Главная — Форматировать как таблицу (Home — Format as Table).
С их помощью этой «убойной парочки» наша задача решается весьма изящно:
Здесь:
- Сначала функция ФИЛЬТР (FILTER) отбирает только те строки из нашей таблицы, где в столбце Клиент — нужное нам имя.
- Потом функция СОРТ (SORT) сортирует отобранные строки по убыванию даты, чтобы самая последняя сделка оказалась сверху.
- Функция ИНДЕКС (INDEX) извлекает первую строку, т.е. выдает нужную нам последнюю сделку.
- И, наконец, внешняя функция ФИЛЬТР убирает из результатов лишние 1-й и 3-й столбцы (Код заказа и Клиент) и оставляет только дату и сумму. Для этого используется массив констант {0;1;0;1}, определяющий какие именно столбцы мы хотим (1) или не хотим (0) выводить.
Способ 4. Поиск последнего совпадения в Power Query
Ну, и для полноты картины, давайте рассмотрим вариант решения нашей задачи обратного поиска с помощью надстройки Power Query. С её помощью всё решается очень быстро и красиво.
1. Преобразуем нашу исходную таблицу в «умную» с помощью сочетания клавиш Ctrl+T или команды Главная — Форматировать как таблицу (Home — Format as Table).
2. Загружаем её в Power Query кнопкой Из таблицы/диапазона на вкладке Данные (Data — From Table/Range).
3. Сортируем (через выпадающий список фильтра в шапке) нашу таблицу по убыванию даты, чтобы самые последние сделки оказались сверху.
4. На вкладке Преобразование выбираем команду Группировать по (Transform — Group By) и задаем группировку по клиентам, а в качестве агрегирующей функции выбираем вариант Все строки (All rows). Назвать новый столбец можно как угодно — например Подробности.
После группировки получим список уникальных имен наших клиентов и в столбце Подробности — таблицы со всеми сделками каждого из них, где первой строкой будет идти самая последняя сделка, которая нам и нужна:
5. Добавляем новый вычисляемый столбец кнопкой Настраиваемый столбец на вкладке Добавить столбец (Add column — Add custom column) и вводим следующую формулу:
Здесь Подробности — это столбец, откуда мы берем таблицы по клиентам, а {0} — это номер строки, которую мы хотим извлечь (нумерация строк в Power Query начинается с нуля). Получаем столбец с записями (Record), где каждая запись — первая строка из каждой таблицы:
Осталось развернуть содержимое всех записей кнопкой с двойными стрелками в шапке столбца Последняя сделка, выбрав нужные столбцы:
… и удалить потом ненужный более столбец Подробности щёлкнув по его заголовку правой кнопкой мыши — Удалить столбцы (Remove columns).
После выгрузки результатов на лист через Главная — Закрыть и загрузить — Закрыть и загрузить в (Home — Close & Load — Close & Load to…) получим вот такую симпатичную таблицу со списком последних сделок, как и хотели:
При изменении исходных данных результаты нужно не забыть обновить, щёлкнув по ним правой кнопкой мыши — команда Обновить (Refresh) или сочетанием клавиш Ctrl+Alt+F5.
Ссылки по теме
- Функция ПРОСМОТРХ — наследник ВПР
- Как использовать новые функции динамических массивов СОРТ, ФИЛЬТР и УНИК
- Поиск последней непустой ячейки в строке или столбце функцией ПРОСМОТР
Поиск позиции снизу вверх, а не наоборот? |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Содержание
- Поиск последнего вхождения (инвертированный ВПР)
- Способ 1. Поиск последней строки формулой массива
- Способ 2. Обратный поиск новой функцией ПРОСМОТРХ
- Способ 3. Поиск строки с последней датой
- Способ 4. Поиск последнего совпадения в Power Query
- Самый быстрый ВПР
- Подопытный кролик
- Способ 1. ВПР
- Способ 2. ВПР с выделением столбцов целиком
- Способ 3. ИНДЕКС и ПОИСКПОЗ
- Способ 4. СУММЕСЛИ
- Способ 5. СУММПРОИЗВ
- Способ 6. ПРОСМОТР
- Способ 7. Новая функция ПРОСМОТРХ
- А если на динамических массивах?
- Что с умными таблицами?
- Бонус. Запрос Power Query
- Итоговая таблица и выводы
Поиск последнего вхождения (инвертированный ВПР)
Все классические функции поиска и подстановки типа ВПР (VLOOKUP) , ГПР (HLOOKUP) , ПОИСКПОЗ (MATCH) и им подобные имеют одну важную особенность — они ищут от начала к концу, т.е. слева-направо или сверху-вниз по исходным данным. Как только находится первое подходящее совпадение — поиск останавливается и найденным оказывается только первое вхождение нужного нам элемента.
Что же делать, если нам требуется найти не первое, а последнее вхождение? Например, последнюю сделку по клиенту, последний платёж, самую свежую заявку и т.д.?
Способ 1. Поиск последней строки формулой массива
Если в исходной таблице нет столбца с датой или порядковым номером строки (заказа, платежа. ), то наша задача сводится, по сути, к поиску последней строки, удовлетворяющей заданному условию. Реализовать подобное можно вот такой формулой массива:
- Функция ЕСЛИ(IF) проверяет по очереди все ячейки в столбце Клиент и выводит номер строки, если в ней лежит нужное нам имя. Номер строки на листе нам даёт функция СТРОКА(ROW) , но поскольку нам нужен номер строки в таблице, то дополнительно приходится вычитать 1, т.к. у нас в таблице есть шапка.
- Затем функция МАКС(MAX) выбирает из сформированного набора номеров строк максимальное значение, т.е. номер самой последней строки клиента.
- Функция ИНДЕКС(INDEX) выдаёт содержимое ячейки с найденным последним номером из любого другого требуемого столбца таблицы (Код заказа).
Всё это нужно вводить как формулу массива, т.е.:
- В Office 365 с последними установленными обновлениями и поддержкой динамических массивов — можно просто жать Enter .
- Во всех остальных версиях после ввода формулы придется нажимать сочетание клавиш Ctrl + Shift + Enter , что автоматически добавит к ней фигурные скобки в строке формул.
Способ 2. Обратный поиск новой функцией ПРОСМОТРХ
Я уже писал большую статью с видео про новую функцию ПРОСМОТРХ (XLOOKUP) , которая появилась в последних версиях Office на замену старушке ВПР (VLOOKUP) . При помощи ПРОСМОТРХ наша задача решается совершенно элементарно, т.к. для этой функции (в отличие от ВПР) можно явно задавать направление поиска: сверху-вниз или снизу-вверх — за это отвечает её последний аргумент (-1):
Способ 3. Поиск строки с последней датой
Если в исходных данных у нас есть столбец с порядковым номером или датой, играющей аналогичную роль, то задача видоизменяется — нам требуется найти уже не последнюю (самую нижнюю) строку с совпадением, а строку с самой поздней (максимальной) датой.
Как это сделать с помощью классических функций я уже подробно разбирал, а теперь давайте попробуем использовать мощь новых функций динамических массивов. Исходную таблицу для пущей красоты и удобства тоже заранее преобразуем в «умную» с помощью сочетания клавиш Ctrl + T или команды Главная — Форматировать как таблицу (Home — Format as Table) .
С их помощью этой «убойной парочки» наша задача решается весьма изящно:
- Сначала функция ФИЛЬТР(FILTER) отбирает только те строки из нашей таблицы, где в столбце Клиент — нужное нам имя.
- Потом функция СОРТ(SORT) сортирует отобранные строки по убыванию даты, чтобы самая последняя сделка оказалась сверху.
- Функция ИНДЕКС(INDEX) извлекает первую строку, т.е. выдает нужную нам последнюю сделку.
- И, наконец, внешняя функция ФИЛЬТР убирает из результатов лишние 1-й и 3-й столбцы (Код заказа и Клиент) и оставляет только дату и сумму. Для этого используется массив констант <0;1;0;1>, определяющий какие именно столбцы мы хотим (1) или не хотим (0) выводить.
Способ 4. Поиск последнего совпадения в Power Query
Ну, и для полноты картины, давайте рассмотрим вариант решения нашей задачи обратного поиска с помощью надстройки Power Query. С её помощью всё решается очень быстро и красиво.
1 . Преобразуем нашу исходную таблицу в «умную» с помощью сочетания клавиш Ctrl + T или команды Главная — Форматировать как таблицу (Home — Format as Table) .
2 . Загружаем её в Power Query кнопкой Из таблицы/диапазона на вкладке Данные (Data — From Table/Range) .
3 . Сортируем (через выпадающий список фильтра в шапке) нашу таблицу по убыванию даты, чтобы самые последние сделки оказались сверху.
4 . На вкладке Преобразование выбираем команду Группировать по (Transform — Group By) и задаем группировку по клиентам, а в качестве агрегирующей функции выбираем вариант Все строки (All rows) . Назвать новый столбец можно как угодно — например Подробности.
После группировки получим список уникальных имен наших клиентов и в столбце Подробности — таблицы со всеми сделками каждого из них, где первой строкой будет идти самая последняя сделка, которая нам и нужна:
5 . Добавляем новый вычисляемый столбец кнопкой Настраиваемый столбец на вкладке Добавить столбец (Add column — Add custom column) и вводим следующую формулу:
Здесь Подробности — это столбец, откуда мы берем таблицы по клиентам, а — это номер строки, которую мы хотим извлечь (нумерация строк в Power Query начинается с нуля). Получаем столбец с записями ( Record ), где каждая запись — первая строка из каждой таблицы:
Осталось развернуть содержимое всех записей кнопкой с двойными стрелками в шапке столбца Последняя сделка, выбрав нужные столбцы:
. и удалить потом ненужный более столбец Подробности щёлкнув по его заголовку правой кнопкой мыши — Удалить столбцы (Remove columns) .
После выгрузки результатов на лист через Главная — Закрыть и загрузить — Закрыть и загрузить в (Home — Close & Load — Close & Load to. ) получим вот такую симпатичную таблицу со списком последних сделок, как и хотели:
При изменении исходных данных результаты нужно не забыть обновить, щёлкнув по ним правой кнопкой мыши — команда Обновить (Refresh) или сочетанием клавиш Ctrl + Alt + F5 .
Источник
Самый быстрый ВПР
Если в ваших таблицах всего лишь несколько десятков строк, то, скорее всего, эта статья не будет для вас актуальной. На таких небольших объемах данных любой способ будет работать достаточно шустро, чтобы вы этого не замечали. Если же число строк в ваших списках измеряется тысячами, да и самих таблиц не одна-две, то время мучительного ожидания на пересчете формул в Excel может доходить до нескольких минут.
В этом случае, правильный выбор функции, применяемой для связывания таблиц, играет решающую роль — разница в производительности между ними, как мы увидим далее, может составлять более 20 раз!
Когда я писал свою первую книжку пять лет назад, то уже делал сравнительный скоростной тест различных способов поиска и подстановки данных функциями ВПР, ИНДЕКС+ПОИСКПОЗ, СУММЕСЛИ и др. С тех пор сменилось три версии Office, появились надстройки Power Query и Power Pivot, кардинально изменившие весь процесс работы с данными. А в прошлом году ещё и обновился вычислительный движок Excel, получив поддержку динамических массивов и новые функции ПРОСМОТРХ, ФИЛЬТР и т.п.
Так что пришла пора снова взяться за секундомер и выяснить — кто же самый быстрый. Ну и, заодно, проверить — какие способы поиска и подстановки данных в Excel вы знаете 🙂
Подопытный кролик
Тест будем проводить на следующем примере:
Это книга Excel с одним листом, где расположены две таблицы: отгрузки (500 000 строк) и прайс-лист (600 строк). Наша задача — подставить цены из прайс-листа в таблицу отгрузок. Для каждого способа будем вводить формулу в ячейку С2 и копировать вниз на весь столбец, замеряя время, которое потребуется Excel, чтобы просчитать весь столбец из полумиллиона ячеек. Полученные значения, безусловно, зависят от множества факторов (поколение процессора, объем оперативной памяти, текущая загрузка системы, версия Office и т.д.), но нам важны не конкретные цифры, а, скорее, их сравнение друг с другом. Важно понимать прожорливость каждого способа и их ограничения.
Способ 1. ВПР
Сначала — классика 🙂 Легендарная функция вертикального просмотра — ВПР (VLOOKUP) , которая приходит в голову первой в подобных ситуациях:
Здесь участвуют следующие аргументы:
- B2 — искомое значение, т.е. название товара, который мы хотим найти в прайс-листе
- $G$2:$H$600 — закреплённая знаками доллара (чтобы не сползала при копировании формулы вниз) абсолютная ссылка на прайс
- 2 — номер столбца в прайс-листе, откуда мы хотим взять цену
- 0 или ЛОЖЬ — переключение в режим поиска точного соответствия, когда любое некорректное название товара (например, ФОНЕРА) в столбце B в таблице отгрузок приведёт к появлению ошибки #Н/Д как результата работы функции.
Время вычисления = 4,3 сек.
Способ 2. ВПР с выделением столбцов целиком
Многие пользователи, применяя ВПР, во втором аргументе этой функции, где нужно задать поисковую таблицу (прайс), выделяют не ограниченный диапазон ( $G$2:$H$600 ), а сразу столбцы G:H целиком. Это проще, быстрее, позволяет не думать про F4 и то, что завтра прайс-лист может быть на несколько строк больше. Формула в этом случае выглядит тоже компактнее:
В старых версиях Excel такое выделение не сильно влияло на скорость вычислений, но сейчас (неожиданно для меня, признаюсь) результат получился в разы хуже предыдущего.
Время вычисления = 14,5 сек.
Способ 3. ИНДЕКС и ПОИСКПОЗ
Следующей после ВПР ступенью эволюции для многих пользователей Microsoft Excel обычно является переход на использование связки функций ИНДЕКС (INDEX) и ПОИСКПОЗ (MATCH) . Выглядит эта формула так:
Функция ИНДЕКС извлекает из заданного в первом аргументе диапазона (столбца $H$2:$H$600 с ценами в прайс-листе) содержимое ячейки с заданным номером. А номер этот, в свою очередь, определяется функцией ПОИСКПОЗ, у которой три аргумента:
- Что нужно найти — название товара из B2
- Где мы это ищем — столбец с названиями товаров в прайсе ( $G$2:$G$600 )
- Режим поиска: 0 — точный, 1 или -1 — приблизительный с округлением в меньшую или большую сторону, соответственно.
Формула выходит чуть сложнее, но, при этом имеет несколько ощутимых преимуществ перед классической ВПР, а именно:
- Не нужно отсчитывать номер столбца (как в третьем аргументе ВПР).
- Можно извлекать данные, которые находятся левее столбца, где просходит поиск.
По скорости, однако же, этот способ проигрывает ВПР почти в два раза:
Время вычисления = 7,8 сек.
Если же, вдобавок, полениться и выделять не ограниченные диапазоны, а столбцы целиком:
. то результат получается совсем печальный:
Время вычисления = 28,5 сек.
28 секунд, Карл! В 6 раз медленнее ВПР!
Способ 4. СУММЕСЛИ
Если нужно найти не текстовые, а именно числовые данные (как в нашем случае — цену), то вместо ВПР вполне можно использовать функцию СУММЕСЛИ (SUMIF) . Изначально она задумывалась как инструмент для выборочного суммирования данных по условию (найди и сложи мне все продажи кабелей, например), но можно заставить её искать нужный нам товар и в прайс-листе. Если грузы в нём не повторяются, то суммировать будет не с чем и эта функция просто выведет искомое значение:
- Первый аргумент СУММЕСЛИ — это диапазон проверяемых ячеек, т.е. названия товаров в прайсе ( $G$2:$G$600 ).
- Второй аргумент ( B2 ) — что мы ищем.
- Третий аргумент — диапазон ячеек с ценами $H$2:$H$600 , числа из которых мы хотим просуммировать, если в соседних ячейках проверяемого диапазона есть искомое значение.
Очевидным минусом такого подхода является то, что он работает только с числами. Также этот способ не удобен, если прайс-лист находится в отдельном файле — придется всё время держать его открытым, т.к. функция СУММЕСЛИ не умеет брать данные из закрытых книг, в отличие от ВПР, для которой это не проблема.
В плюсы же можно записать удобство при поиске сразу по нескольким столбцам — для этого идеально подходит более продвинутая версия этой функции — СУММЕСЛИМН (SUMIFS) . Скорость вычислений же, при этом, весьма посредственная:
Время вычисления = 12,8 сек.
При выделении столбцов целиком, т.е. использовании формулы вида =СУММЕСЛИ( G:G ; B2 ; H:H ) всё ещё хуже:
Время вычисления = 41,7 сек.
Это самый плохой результат в нашем тесте.
Способ 5. СУММПРОИЗВ
Этот подход сейчас встречается не часто, но всё ещё достаточно регулярно. Обычно так любят извращаться пользователи старой школы, ещё хорошо помнящие те времена, когда в Excel было всего 255 столбцов и 56 цветов 🙂
Суть этого метода заключается в использовании функции СУММПРОИЗВ (SUMPRODUCT) , изначально предназначенной для поэлементного перемножения нескольких диапазонов с последующим суммированием полученных произведений. В нашем случае, вместо одного из массивов будет выступать условие, а вторым будут цены:
Выражение ($G$2:$G$600=B2) , по сути, проверяет каждое название груза в прайс-листе на предмет соответствия искомому значению (ФАНЕРА ПР). Результатом каждого сравнения будет логическое значение ИСТИНА (TRUE ) или ЛОЖЬ (FALSE) , что в Excel интерпретируется как 1 и 0, соответственно. Последующее умножение этих нулей и единиц на цены оставит в живых цену только того товара, который нам, в данном случае, и нужен.
Эта формула является, по сути, формулой массива, но не требует нажатия обычного для них сочетания клавиш Ctrl + Shift + Enter , т.к. функция СУММПРОИЗВ поддерживает массивы уже сама по себе. Возможно, по этой же причине (формулы массива всегда медленнее, чем обычные) такой скорость пересчёта такой формулы — не очень:
Время вычисления = 11,8 сек.
- Совместимость с любыми, самыми древними версиями Excel.
- Возможность задавать сложные условия (и несколько)
- Способность этой формулы работать с данными из закрытых файлов, если добавить перед ней двойное бинарное отрицание (два подряд знака «минус»). СУММЕСЛИМН таким похвастаться не может.
Способ 6. ПРОСМОТР
Ещё один относительно экзотический способ поиска и подстановки данных, наравне с ВПР — это использование функции ПРОСМОТР (LOOKUP) . Только не перепутайте её с новой, буквально, на днях появившейся функцией ПРОСМОТРХ (XLOOKUP) — про неё мы поговорим дальше особо. Функция ПРОСМОТР существовала в Excel начиная с самых ранних версий и тоже вполне может решить нашу задачу:
- B2 — название груза, которое мы ищем
- $G$2:$G$600 — одномерный диапазон-вектор (столбец или строка), где мы ищем совпадение
- $H$2:$H$600 — такого же размера диапазон, откуда нужно вернуть найденный результат (цену)
На первый взгляд всё выглядит очень удобно и логично, но всю картину портят два неочевидных момента:
- Эта функция требует обязательной сортировки прайс-листа по возрастанию (алфавиту) и без этого не работает.
- Если в таблице отгрузок искомое значение будет написано с опечаткой (например, АГ Е ДОЛ вместо АГИДОЛ), то функция ПРОСМОТР выдаст не ошибку #Н/Д, а цену для ближайшего предыдущего товара:
При работе с неидеальными данными в реальном мире это гарантированно создаст проблемы, как вы понимаете.
Скорость же вычислений у функции ПРОСМОТР (LOOKUP) весьма приличная:
Время вычисления = 7,6 сек.
Способ 7. Новая функция ПРОСМОТРХ
Эта функция пришла с одним из недавних обновлений пока только пользователям Office 365 и пока отсутствует во всех остальных версиях (Excel 2010, 2013, 2016, 2019). По сравнению с классической ВПР у этой функции есть масса преимуществ (упрощенный синтаксис, возможность искать не только сверху-вниз, возможность сразу задать значение вместо #Н/Д и т.д.) Формула для решения нашей задачи будет выглядеть в этом случае так:
Если не брать в расчёт необязательные 4,5,6 аргументы, то синтаксис этой функции полностью совпадает с её предшественником — функцией ПРОСМОТР (LOOKUP) . Скорость вычислений при тестировании на наши 500000 строк тоже оказалась аналогичной:
Время вычисления = 7,6 сек.
Почти в два раза медленнее, чем у ВПР, вместо которой Microsoft предлагает теперь использовать ПРОСМОТРХ. Жаль.
И, опять же, если полениться и выделить диапазоны в прайс-листе целыми столбцами:
. то скорость падает до совершенно неприличных уже значений:
Время вычисления = 28,3 сек.
А если на динамических массивах?
Прошлогоднее (осень 2019) обновление вычислительного движка Microsoft Excel добавило ему поддержку динамических массивов (Dynamic Arrays), о которых я уже писал. Это принципиально новый подход к работе с данными, который можно использовать почти с любыми классическими функциями Excel. На примере ВПР это будет выглядеть так:
Разница с классическим вариантом в том, что первым аргументом ВПР здесь выступает не одно искомое значение (а формулу потом нужно копировать вниз на остальные строки), а сразу весь массив из полумиллиона грузов B2:B500000, цены для которых мы хотим найти. Формула при этом сама распространяется вниз, занимая требуемое количество ячеек.
Скорость пересчета в таком варианте меня, откровенно говоря, ошеломила — пауза между нажатием на Enter после ввода формулы и получением результатов почти отсутствовала.
Время вычисления = 1 сек.
Что интересно, и новая ПРОСМОТРХ, и старая ПРОСМОТР, и связка ИНДЕКС+ПОИСКПОЗ в таком режиме тоже были очень быстрыми — время вычислений не больше 1 секунды! Фантастика.
А вот олдскульные подходы на основе СУММПРОИЗВ и СУММЕСЛИ(МН) с динамическими массивами работать отказались 🙁
Что с умными таблицами?
Обрадовавшись фантастическим результатам, полученным на динамических массивах, я решил вдогон попробовать протестировать разницу в скорости при работе с обычными и «умными» таблицами. Я имею ввиду те самые «красивые таблицы», в которые вы можете преобразовать ваш диапазон с помощью команды Форматировать как таблицу на вкладке Главная (Home — Format as Table) или с помощью сочетания клавиш Ctrl + T .
Если предварительно превратить наши отгрузки и прайс в «умные» (по умолчанию они получат имена Таблица1 и Таблица2, соответственно), то формула с той же ВПР будет выглядеть как:
- [@Груз] — ссылка на ячейку B2, означающая, в данном случае, что нужно взять значение из той же строки из столбца Груз текущей умной таблицы.
- Таблица2 — ссылка на прайс-лист
Жирным плюсом такого подхода будет возможность легко добавлять данные в наши таблицы в будущем. При дописывании новых строк в отгрузки или к прайс-листу, наши «умные» таблицы будут растягиваться автоматически.
Скорость же, как выяснилось, тоже вырастает очень значительно и примерно равна скорости работы на динамических массивах:
Время вычисления = 1 сек.
У меня есть подозрение, что дело тут не в самих «умных» таблицах, а всё в том же обновлении вычислительного движка, т.к. на старых версиях Excel такого прироста в скорости на умных таблицах я не помню.
Бонус. Запрос Power Query
Замерять, так замерять! Давайте, для полноты картины, сравним наши перечисленные способы еще и с запросом Power Query, который тоже может решить нашу задачу. Кто-то скажет, что некорректно сравнивать пересчёт формул с механизмом обновления запроса, но мне, откровенно говоря, просто самому было интересно — кто быстрее?
- Превращаем обе наши таблицы в «умные» с помощью команды Форматировать как таблицу на вкладке Главная (Home — Format as Table) или с помощью сочетания клавиш Ctrl + T .
- По очереди загружаем таблицы в Power Query с помощью команды Данные — Из таблицы / диапазона (Data — From Table/Range) .
- После загрузки в Power Query возвращаемся обратно в Excel, оставляя загруженные данные как подключение. Для этого в окне Power Query выбираем Главная — Закрыть и загрузить — Закрыть и загрузить в. — Только создать подключение (Home — Close&Load — Close&Load to. — Only create connection) .
- После того, как обе исходные таблицы будут загружены как подключения, создадим ещё один, третий запрос, который будет объединять их между собой, подставляя цены из прайса в отгрузки. Для этого на вкладке Данные выберем Получить данные / Создать запрос — Объединить запросы — Объединить (Get Data / New Query — Merge queries — Merge) :
В открывшемся окне выберем исходные таблицы в выпадающих списках и выделим столбцы, по которым произойдет связывание:
После нажатия на ОК мы вернемся в окно Power Query, где увидим нашу таблицу отгрузок с добавленным к ней столбцом, где в каждой ячейке будет лежать фрагмент прайс-листа, соответствующий этому грузу. Развернем вложенные таблицы с помощью кнопки с двойными стрелками в шапке столбца, выбрав нужные нам данные (цены):
В отличие от формул, запросы Power Query не обновляются автоматически «на лету», а требуют щелчка правой кнопкой мыши по таблице (или запросу в правой панели) и выбору команды Обновить (Refresh) . Также можно воспользоваться командой Обновить все (Refresh All) на вкладке Данные (Data) .
Время обновления = 8,2 сек.
Итоговая таблица и выводы
Если вы честно дочитали до этого места, то какие-то выводы, наверное, уже сделали самостоятельно. Если же пропустили все детали и сразу перешли к итогам, то вот вам общая результирующая таблица по скорости всех методов:
Само-собой, у каждого из нас свои предпочтения, задачи и тараканы, но для себя я сформулировал выводы после этого тестирования так:
- ВПР всё ещё главная рабочая лошадка. После прошлогодних обновлений, ускоряющих ВПР, и осенних обновлений вычислительного движка, эта функция заиграла новыми красками и даёт жару по-полной.
- Не нужно лениться и выделять столбцы целиком — для всех способов без исключения это ухудшает результаты почти в 3 раза.
- Экзотические способы из прошлого типа СУММПРОИЗВ и СУММЕСЛИ — в топку. Они работают очень медленно и, вдобавок, не поддерживают динамические массивы.
- Динамические массивы и умные таблицы — это будущее.
К сожалению, у меня не было возможностей полноценно протестировать эти методы на старых версиях Excel и на Excel for Mac (запускать эмуляцию Office на виртуальной машине и тестировать скорость — не есть правильно). Буду благодарен, если вы сможете найти время, чтобы прогнать эти способы на своих ПК и версиях и поделитесь результатами и своими мыслями в комментариях, чтобы вместе мы смогли составить полную картину.
Источник
Обычно функция Vlookup может помочь вам найти данные сверху вниз, чтобы получить первое совпадающее значение из списка. Но иногда вам нужно выполнить vlookup снизу вверх, чтобы извлечь последнее соответствующее значение. Есть ли у вас какие-нибудь хорошие идеи для решения этой задачи в Excel?
Vlookup последнее совпадающее значение снизу вверх с формулой
Vlookup последнее совпадающее значение снизу вверх с помощью полезной функции
Vlookup последнее совпадающее значение снизу вверх с формулой
Чтобы vlookup соответствовал значению снизу вверх, вам может помочь следующая формула LOOKUP, пожалуйста, сделайте следующее:
Введите приведенную ниже формулу в пустую ячейку, в которой вы хотите получить результат:
=LOOKUP(2,1/($A$2:$A$17=D2),$B$2:$B$17)
Затем перетащите дескриптор заполнения вниз к ячейкам, в которых вы хотите получить результаты, последние соответствующие значения будут возвращены сразу, см. Снимок экрана:
Внимание: В приведенной выше формуле: A2: A17 указывает столбец, который вы ищете, D2 это критерий, по которому вы хотите вернуть относительные данные и B2: B17 — это список, содержащий значение, которое вы хотите вернуть.
Vlookup последнее совпадающее значение снизу вверх с помощью полезной функции
Если у вас есть Kutools for Excel, С его ПОСМОТРЕТЬ снизу вверх вы также можете решить эту задачу, не запоминая никаких формул.
Советы:Чтобы применить это ПОСМОТРЕТЬ снизу вверх функция, во-первых, вы должны скачать Kutools for Excel, а затем быстро и легко примените эту функцию.
После установки Kutools for Excel, пожалуйста, сделайте так:
1. Нажмите Кутулс > Супер ПОСМОТРЕТЬ > ПОСМОТРЕТЬ снизу вверх, см. снимок экрана:
2. В ПОСМОТРЕТЬ снизу вверх диалоговом окне выполните следующие операции:
- Выберите ячейки значений поиска и выходные ячейки из Значения поиска и диапазон вывода раздел;
- Затем укажите соответствующие элементы из Диапазон данных .
3, Затем нажмите OK кнопка, все последние совпадающие значения будут возвращены сразу, см. снимок экрана:
Скачать и бесплатную пробную версию Kutools for Excel от Yhao сейчас!
Больше относительных статей:
- Значения Vlookup на нескольких листах
- В excel мы можем легко применить функцию vlookup, чтобы вернуть совпадающие значения в одной таблице рабочего листа. Но задумывались ли вы когда-нибудь над тем, как получить значение vlookup на нескольких листах? Предположим, у меня есть следующие три листа с диапазоном данных, и теперь я хочу получить часть соответствующих значений на основе критериев из этих трех листов.
- Используйте точное и приблизительное совпадение Vlookup в Excel
- В Excel vlookup — одна из наиболее важных функций для поиска значения в крайнем левом столбце таблицы и возврата значения в той же строке диапазона. Но успешно ли вы применяете функцию vlookup в Excel? В этой статье я расскажу о том, как использовать функцию vlookup в Excel.
- Vlookup возвращает пустое или определенное значение вместо 0 или н / д
- Обычно, когда вы применяете функцию vlookup для возврата соответствующего значения, если соответствующая ячейка пуста, она вернет 0, а если подходящее значение не найдено, вы получите значение ошибки # N / A, как показано ниже. Вместо того, чтобы отображать значение 0 или # N / A, как вы можете заставить его отображать пустую ячейку или другое конкретное текстовое значение?
- Vlookup и возврат всей / всей строки совпадающего значения в Excel
- Обычно вы можете vlookup и вернуть соответствующее значение из диапазона данных с помощью функции Vlookup, но пытались ли вы когда-нибудь найти и вернуть всю строку данных на основе определенных критериев, как показано на следующем снимке экрана.
- Vlookup и объединение нескольких соответствующих значений в Excel
- Как все мы знаем, функция Vlookup в Excel может помочь нам найти значение и вернуть соответствующие данные в другом столбце, но в целом она может получить только первое относительное значение, если есть несколько совпадающих данных. В этой статье я расскажу о том, как выполнить vlookup и объединить несколько соответствующих значений только в одной ячейке или вертикальном списке.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (6)
Оценок пока нет. Оцените первым!
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Описание
В этой статье приведены пошаговые инструкции по поиску данных в таблице (или диапазоне ячеек) с помощью различных встроенных функций Microsoft Excel. Для получения одного и того же результата можно использовать разные формулы.
Создание образца листа
В этой статье используется образец листа для иллюстрации встроенных функций Excel. Рассматривайте пример ссылки на имя из столбца A и возвращает возраст этого человека из столбца C. Чтобы создать этот лист, введите указанные ниже данные в пустой лист Excel.
Введите значение, которое вы хотите найти, в ячейку E2. Вы можете ввести формулу в любую пустую ячейку на том же листе.
A |
B |
C |
D |
E |
||
1 |
Имя |
Правитель |
Возраст |
Поиск значения |
||
2 |
Анри |
501 |
Плот |
Иванов |
||
3 |
Стэн |
201 |
19 |
|||
4 |
Иванов |
101 |
максималь |
|||
5 |
Ларри |
301 |
составляет |
Определения терминов
В этой статье для описания встроенных функций Excel используются указанные ниже условия.
Термин |
Определение |
Пример |
Массив таблиц |
Вся таблица подстановки |
A2: C5 |
Превышающ |
Значение, которое будет найдено в первом столбце аргумента «инфо_таблица». |
E2 |
Просматриваемый_массив |
Диапазон ячеек, которые содержат возможные значения подстановки. |
A2: A5 |
Номер_столбца |
Номер столбца в аргументе инфо_таблица, для которого должно быть возвращено совпадающее значение. |
3 (третий столбец в инфо_таблица) |
Ресулт_аррай |
Диапазон, содержащий только одну строку или один столбец. Он должен быть такого же размера, что и просматриваемый_массив или Лукуп_вектор. |
C2: C5 |
Интервальный_просмотр |
Логическое значение (истина или ложь). Если указано значение истина или опущено, возвращается приближенное соответствие. Если задано значение FALSE, оно будет искать точное совпадение. |
ЛОЖЬ |
Топ_целл |
Это ссылка, на основе которой вы хотите основать смещение. Топ_целл должен ссылаться на ячейку или диапазон смежных ячеек. В противном случае функция СМЕЩ возвращает #VALUE! значение ошибки #ИМЯ?. |
|
Оффсет_кол |
Число столбцов, находящегося слева или справа от которых должна указываться верхняя левая ячейка результата. Например, значение «5» в качестве аргумента Оффсет_кол указывает на то, что верхняя левая ячейка ссылки состоит из пяти столбцов справа от ссылки. Оффсет_кол может быть положительным (то есть справа от начальной ссылки) или отрицательным (то есть слева от начальной ссылки). |
Функции
LOOKUP ()
Функция Просмотр находит значение в одной строке или столбце и сопоставляет его со значением в той же позицией в другой строке или столбце.
Ниже приведен пример синтаксиса формулы подСТАНОВКи.
= Просмотр (искомое_значение; Лукуп_вектор; Ресулт_вектор)
Следующая формула находит возраст Марии на листе «образец».
= ПРОСМОТР (E2; A2: A5; C2: C5)
Формула использует значение «Мария» в ячейке E2 и находит слово «Мария» в векторе подстановки (столбец A). Формула затем соответствует значению в той же строке в векторе результатов (столбец C). Так как «Мария» находится в строке 4, функция Просмотр возвращает значение из строки 4 в столбце C (22).
Примечание. Для функции Просмотр необходимо, чтобы таблица была отсортирована.
Чтобы получить дополнительные сведения о функции Просмотр , щелкните следующий номер статьи базы знаний Майкрософт:
Использование функции Просмотр в Excel
ВПР ()
Функция ВПР или вертикальный просмотр используется, если данные указаны в столбцах. Эта функция выполняет поиск значения в левом столбце и сопоставляет его с данными в указанном столбце в той же строке. Функцию ВПР можно использовать для поиска данных в отсортированных или несортированных таблицах. В следующем примере используется таблица с несортированными данными.
Ниже приведен пример синтаксиса формулы ВПР :
= ВПР (искомое_значение; инфо_таблица; номер_столбца; интервальный_просмотр)
Следующая формула находит возраст Марии на листе «образец».
= ВПР (E2; A2: C5; 3; ЛОЖЬ)
Формула использует значение «Мария» в ячейке E2 и находит слово «Мария» в левом столбце (столбец A). Формула затем совпадет со значением в той же строке в Колумн_индекс. В этом примере используется «3» в качестве Колумн_индекс (столбец C). Так как «Мария» находится в строке 4, функция ВПР возвращает значение из строки 4 В столбце C (22).
Чтобы получить дополнительные сведения о функции ВПР , щелкните следующий номер статьи базы знаний Майкрософт:
Как найти точное совпадение с помощью функций ВПР или ГПР
INDEX () и MATCH ()
Вы можете использовать функции индекс и ПОИСКПОЗ вместе, чтобы получить те же результаты, что и при использовании поиска или функции ВПР.
Ниже приведен пример синтаксиса, объединяющего индекс и Match для получения одинаковых результатов поиска и ВПР в предыдущих примерах:
= Индекс (инфо_таблица; MATCH (искомое_значение; просматриваемый_массив; 0); номер_столбца)
Следующая формула находит возраст Марии на листе «образец».
= ИНДЕКС (A2: C5; MATCH (E2; A2: A5; 0); 3)
Формула использует значение «Мария» в ячейке E2 и находит слово «Мария» в столбце A. Затем он будет соответствовать значению в той же строке в столбце C. Так как «Мария» находится в строке 4, формула возвращает значение из строки 4 в столбце C (22).
Обратите внимание Если ни одна из ячеек в аргументе «число» не соответствует искомому значению («Мария»), эта формула будет возвращать #N/А.
Чтобы получить дополнительные сведения о функции индекс , щелкните следующий номер статьи базы знаний Майкрософт:
Поиск данных в таблице с помощью функции индекс
СМЕЩ () и MATCH ()
Функции СМЕЩ и ПОИСКПОЗ можно использовать вместе, чтобы получить те же результаты, что и функции в предыдущем примере.
Ниже приведен пример синтаксиса, объединяющего смещение и сопоставление для достижения того же результата, что и функция Просмотр и ВПР.
= СМЕЩЕНИЕ (топ_целл, MATCH (искомое_значение; просматриваемый_массив; 0); Оффсет_кол)
Эта формула находит возраст Марии на листе «образец».
= СМЕЩЕНИЕ (A1; MATCH (E2; A2: A5; 0); 2)
Формула использует значение «Мария» в ячейке E2 и находит слово «Мария» в столбце A. Формула затем соответствует значению в той же строке, но двум столбцам справа (столбец C). Так как «Мария» находится в столбце A, формула возвращает значение в строке 4 в столбце C (22).
Чтобы получить дополнительные сведения о функции СМЕЩ , щелкните следующий номер статьи базы знаний Майкрософт:
Использование функции СМЕЩ
Нужна дополнительная помощь?
Как ВПР найти не первое (вверху таблицы), а последнее совпадение (внизу) ?
Автор Snek, 05.10.2011, 12:28
« назад — далее »
Есть таблица А1:С100 и искомое значение D1.
В столбце A1 могут содержаться повторяющиеся значения.
Предположим: А3 = D1, А5 = D1 и A6= D1
Если применить функцию =ВПР(D1;A1:C100;3;0), результатом будет являться значение в ячейке С3 , то есть первое (верхнее) совпадение.
А какой формулой найти последнее (нижнее) совпадение, то есть что бы результат был С6
?
P.S. ячейка D1 заполняется вручную, а ячейки А1:С100 заполняются посредством ссылок и формул.
=ИНДЕКС(B1:B9;МАКС(ЕСЛИ(A1:A9=D1;СТРОКА(B1:B9))))
формула массива.
ЗЫ Файл надо прикладывать, что бы не приходилось его за Вас рисовать.
Или обычная формула
=ПРОСМОТР(2;1/(D1=A1:A9);B1:B9)
Цитата: exceleved от 05.10.2011, 13:29
Или обычная формула=ПРОСМОТР(D1;A1:A9;B1:B9)
С этой формулы я и начинал свои попытки… что бы я ни делал не удалось заставить ее работать: просто вообще ничего искать хочет, вроде не дурак в екселе, но причину найти не смог.
А формула массива работает, спасибо, уже приспособил под свои вычисления.
Эти функции массива не хотят работать в 2003 оффисе (выдает #число )
Что можно сделать в 2003 оффисе с данной проблемкой?
Цитата: Snek от 05.10.2011, 20:41
Эти функции массива не хотят работать в 2003 оффисе (выдает #число )
Странно, в 2000 работает.
Попробуйте исправленную формулу с ПРОСМОТР.
Цитата: Snek от 05.10.2011, 20:41
Эти функции массива не хотят работать в 2003 оффисе (выдает #число )
Формулу писал именно в 2003.
Вы её точно как формулу массива вводите?
Цитата: _Boroda_ от 06.10.2011, 12:32
Встаньте мышой на эту ячейку, сделайте скрин экрана (так, чтобы было видно строку формул) и положите сюда этот скрин и Ваш файл Excel
Вот сам файл. Если его открыть в 2003 оффсе и попробовать изменить формулу (функцию массива) — сразу получается #Число и ничего поделать с этим не получается.
Плюс файл явто тормозит при вычислении…
Файл открывается уже 20 минут…
Вы можете поменьше размером выложить?
Оставьте пару десятков строк, остальное удалите.
Для решения проблемы этого будет достаточно.
Цитата: Serge 007 от 09.10.2011, 10:49
Файл открывается уже 20 минут…
Вы можете поменьше размером выложить?
Оставьте пару десятков строк, остальное удалите.
Для решения проблемы этого будет достаточно.
Извиняюсь, вот адекватные по размеру файлы:
один файл с полной таблицей результатов
второй файл с сокращенной таблицей результатов
Плюс приложил файл со скрином сообщения при сохранении файла в формате «97-2003» офиса
Цитата: Snek от 09.10.2011, 14:40
приложил файл со скрином сообщения при сохранении файла в формате «97-2003» офиса
Блин, Вам же по-русски написали в чём причина ошибки…
Зачем Вы используете ЦЕЛЫЙ столбец в формуле?
Я или exceleved предлагали Вам такое решение?
Цитата: Serge 007 от 09.10.2011, 17:41
Цитата: Snek от 09.10.2011, 14:40
приложил файл со скрином сообщения при сохранении файла в формате «97-2003» офисаБлин, Вам же по-русски написали в чём причина ошибки…
Зачем Вы используете ЦЕЛЫЙ столбец в формуле?
Я или exceleved предлагали Вам такое решение?
Спасибо, все получилось наконец-таки.
Сначала, почему-то, не сообразил.
- Профессиональные приемы работы в Microsoft Excel
-
►
Обмен опытом -
►
Microsoft Excel -
►
Как ВПР найти не первое (вверху таблицы), а последнее совпадение (внизу) ?
Просмотров: 56
Назначение и принцип работы функции ВПР в Excel.
Использование ВПР В Excel
Сегодня мы рассмотрим, как работает функция ВПР в Excel. Рассмотрим ее особенности подробно на практических примерах из реальных рабочих ситуаций Функция ВПР в Excel позволяет извлечь данные из таблицы на пересечении указанной колонки и строки ячейки первого столбца этой таблицы, содержащей значение, указанное для поиска. Описание выглядит немного скомкано, но скоро все встанет на свои места.
Чтобы разобраться, как работает эта функция, надо немного отойти от Excel в сторону реальной жизни. Каждый из нас делает звонки. Неважно, со смартфона или айфона. Главное тут другое. Редко кто набирает нужный телефонный номер вручную. Наших контактов так много, что запоминать их нет смысла. Мы все эти номера и не запоминаем, а храним всю эту информацию в телефонной книжке нашего гаджета. И вот тут наступает интересный момент. При звонке мы выбираем ИМЯ АБОНЕНТА, с которым хотим соединиться по телефону. А вот сам звонок идет уже по его НОМЕРУ. Как это происходит? Да просто. Наш гаджет проверяет первый столбец телефонной книжки. Как только он находит выбранное нами ИМЯ АБОНЕНТА, он в строчке с найденным ИМЕНЕНМ переходит в столбец с НОМЕРАМИ и получает нужную информацию.
Такой же принцип использует и функция ВПР. Она выполняет поиск заданного нами значения в первом столбце нашей таблицы. Как только значение найдено, функция переходит в тот столбец этой таблицы, номер которого мы указали, и выдает нам найденную информацию.
Схематично это выглядит следующим образом:
Синтаксис функции ВПР.
Как же использовать функцию ВПР в Excel? Для этого вначале разберемся в порядке указания данных при вводе ВПР, другими словами, в синтаксисе. Указывают по очереди, в скобках после названия, следующие исходные данные, или, по-научному, аргументы.
- Искомое значение. Именно его Excel будет искать в ПЕРВОМ столбце нашей таблицы. Тут важно отметить такие тонкости. Прежде всего это значение в первом столбце таблицы должно быть уникальным. Само название ВПР расшифровывается не как «Вертикальный Поиск Решения», как многие думают, а как «Вертикальный ПЕРВЫЙ Результат». Именно ПЕРВЫЙ. К примеру, в приведенной раньше на рисунке таблице нельзя для поиска использовать столбец с именем или фамилией. Они могут быть одинаковыми, а вот номер телефона всегда уникальный. Кстати, именно поэтому нельзя в телефонной книге на телефоне указать одинаковые имена для разных людей. Телефон просто не даст это сделать. Другая тонкость в том, что, как ни странно, но Excel будет искать как точное значение, так и близкое к нему. Другими словами, вовсе не факт, что ВПР найдет именно то значение, которое мы задали. Подробнее об этом поговори чуть-чуть попозже.
- Таблица поиска. Тут надо указать диапазон, в ПЕРВОМ столбце, или, если кому-то так проще, в ПЕРВОЙ КОЛОНКЕ которого Excel станет искать заданное нами искомое значение. В этой таблице может быть любое количество столбцов. Столбец может быть и только один. Обычно такое применяется, когда надо определить, присутствует ли наше значение в списке или нет. С другой стороны, в этом случае проще и быстрее использовать функции ПОИСКПОЗ или СЧЕТЕСЛИ.
- Номер столбца. Порядковый номер столбца нашей таблицы, из которого мы желаем получить результат. Еще раз обращаю внимание на этот аспект. Наше тестовое значение Excel ищет в первом столбце, а вот результат берет из этой же таблицы, но уже колонки с указанным нами номером. Еще раз отмечу – номер столбца задается ВНУТРИ таблица поиска. Именно поэтому на примере ниже третьим аргументом указана цифра «2», хотя если считать от начала листа, то колонка явно не будет третьей.
- Интервальный просмотр. Это если говорить официально. А если по-простому, то способ поиска, о чем уже говорилось. Есть два варианта.
- Указать слово ИСТИНА, ввести цифру 1 или вообще ничего не указать. Тогда Excel будет искать как само значение, так и ближайшее к нему, но меньше. Значения в первом столбце нашей таблицы поиска должны располагаться по возрастанию. Данный вариант применяется, когда надо найти не конкретное значение, а обработать некий диапазон. На предыдущем рисунке обрабатываются диапазоны цен, для каждого из которых задан свой процент скидки.
- Написать слово ЛОЖЬ или цифру 0. В этом случае будет идти точный поиск заданного значения. Именно таким образом по указанному номеру мы определили фамилию абонента.
Работа функции ВПР и возможные проблемы.
Часто на просторах интернета можно найти высказывание, что если задать четвертым аргументом значение ИСТИНА ИЛИ 1, то ВПР сработает быстрее. Это неправда. Посмотрите на скриншоты ниже. Обратите внимание, что быстрее оказался вариант, в котором в качестве интервального просмотра использована ЛОЖЬ.
На самом деле скорость зависит от расположения заданного нами искомого значения в таблице. Если оно ближе к началу, то быстрее сработает вариант с ЛОЖЬЮ, а если ближе к концу, то быстрее вариант с ИСТИНОЙ. Дело в самом поиске. Если мы укажем четвертым аргументом ИСТИНУ, то Excel ищет наше значение в первом столбце СНИЗУ ВВЕРХ. Если же выбрать вариант ЛОЖЬ, то поиск будет идти СВЕРХУ ВНИЗ.
При выборе варианта ИСТИНА Excel двигается по первому столбцу вверх до тех пор, пока не наткнется либо на указанное нами значение, либо на первое же значение, которое заведомо меньше указанного нами. Как только это произошло, поиск заканчивается.
Именно поэтому в примере ниже для директора Excel выводит оклад равный окладу бухгалтера, хотя вообще-то для директора значатся совсем другие цифры…
Еще раз повторю. Если мы указываем в конце истину, или единицу, то первый столбец в нашей таблице для поиска ОБЯЗАН быть по возрастанию. Именно с этим связана проблема на скриншоте выше.
В реальных таблицах из жизни, а не учебных, сортировка первого столбца по возрастанию встречается крайне редко. Более того, зачастую она просто невозможна, как в примере ниже. Учитывая это, применяйте вариант с приблизительным поиском, то есть с единицей либо с истиной в качестве интервального просмотра очень осторожно и только тогда, когда это действительно нужно. В том же примере с окладами мы не увидели никакой ошибки, хотя Excel из-за нашей ошибки взял явно не те данные.
Вторая проблема всплывает при указании в качестве искомого значения числового кода. Посмотрите сами на следующее.
Значение в столбце код есть, а ВПР не смог найти расчетную цену. Как же так? А все просто.
Составители прайса применили формат из девяти нулей. В результате те позиции, где не оказалось реальных чисел заполнились нулями. Обратите внимание на иллюстрации ниже на строку формул.
Еще одна проблема может быть связана с тем, что заданное нами для поиска число в первом столбце может быть указано как текст.
Работа функции ВПР и исправление ошибок.
Вы видите, что не всегда Функция ВПР в Excel работает безошибочно. Как же избежать неверного результата при работе ВПР? Прежде всего создавайте таблицы поиска аккуратно. Если уж вам позарез нужны нули в начале кода и без них ну никак, используйте текстовый формат. Да, Excel пожалуется, что цифры записаны как текст. Уверяю вас, на распечатке это никак не скажется. Excel печатает метки ошибок только если вы сами это указали в настройках печати и в параметрах.
Если же таблица уже готовая, проверьте, имеются ли ошибки при поиске значения, которое в ней явно присутствует. Обычно это как раз числа в виде текста. Если это так, добавьте в начало колонку, в которой принудительно переведите все значения в текст с помощью одноименной функции и используйте для поиска именно этот столбец. Как вариант, примените комбинацию ВПР и ЕСЛИОШИБКА. Например, в следующем примере Excel принудительно ищет заданное значение в первом столбце как число, а если это не удается, то уже как текст.
Обратите внимание, что несовпадение в форматах уже никак не помешало получить результат
Заключение.
Сегодня мы с вами разобрали, как использовать функцию ВПР в Excel, как ее правильно применять в работе. Мы узнали, с какими проблемами можно столкнуться при использовании ВПР. Выяснили причину ошибок в работе данной функции и способы из решения.
Остается только добавить, что, во-первых, в Excel имеется полностью идентичная по написанию и применению функции ВПР функция ГПР. Разница только в том, что если ВПР работает со столбцами, то ГПР работает со строками. Во-вторых, в английском варианте эти функции называются соответственно VLOOKUP и HLOOKUP. Ну и в-третьих, если ваше искомое значение не находится в самом первом столбце, к примеру, если вам в прайсе, скриншот которого приведен выше, надо по названию товара определить его код, то использование ВПР ничего не даст. Надо применять комбинацию функций ИНДЕКС или СМЕЩ с функцией ПОИСКПОЗ. ОБ этом мы поговорим немного попозже.
На этом наш урок закончен. Надеюсь, было полезно не только новичкам. До встречи на страницах нашего сайта!