Как ускорить впр в excel

Самый быстрый ВПР

Если в ваших таблицах всего лишь несколько десятков строк, то, скорее всего, эта статья не будет для вас актуальной. На таких небольших объемах данных любой способ будет работать достаточно шустро, чтобы вы этого не замечали. Если же число строк в ваших списках измеряется тысячами, да и самих таблиц не одна-две, то время мучительного ожидания на пересчете формул в 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, который тоже может решить нашу задачу. Кто-то скажет, что некорректно сравнивать пересчёт формул с механизмом обновления запроса, но мне, откровенно говоря, просто самому было интересно — кто быстрее?

Итак:

  1. Превращаем обе наши таблицы в «умные» с помощью команды Форматировать как таблицу на вкладке Главная (Home — Format as Table) или с помощью сочетания клавиш Ctrl+T.
  2. По очереди загружаем таблицы в Power Query с помощью команды Данные — Из таблицы / диапазона (Data — From Table/Range).
  3. После загрузки в Power Query возвращаемся обратно в Excel, оставляя загруженные данные как подключение. Для этого в окне Power Query выбираем Главная — Закрыть и загрузить — Закрыть и загрузить в… — Только создать подключение (Home — Close&Load — Close&Load to… — Only create connection).
  4. После того, как обе исходные таблицы будут загружены как подключения, создадим ещё один, третий запрос, который будет объединять их между собой, подставляя цены из прайса в отгрузки. Для этого на вкладке Данные выберем Получить данные / Создать запрос — Объединить запросы — Объединить (Get Data / New Query — Merge queries — Merge):

    Объединяем запросы

  5. В открывшемся окне выберем исходные таблицы в выпадающих списках и выделим столбцы, по которым произойдет связывание:

    Настройки объединения

  6. После нажатия на ОК мы вернемся в окно Power Query, где увидим нашу таблицу отгрузок с добавленным к ней столбцом, где в каждой ячейке будет лежать фрагмент прайс-листа, соответствующий этому грузу. Развернем вложенные таблицы с помощью кнопки с двойными стрелками в шапке столбца, выбрав нужные нам данные (цены):

    Разворачиваем вложенные таблицы после объединения

  7. Останется выгрузить готовую таблицу обратно на лист с помощью уже знакомой команды Главная — Закрыть и загрузить (Home — Close&Load).

В отличие от формул, запросы Power Query не обновляются автоматически «на лету», а требуют щелчка правой кнопкой мыши по таблице (или запросу в правой панели) и выбору команды Обновить (Refresh). Также можно воспользоваться командой Обновить все (Refresh All) на вкладке Данные (Data).

Время обновления = 8,2 сек.

Итоговая таблица и выводы

Если вы честно дочитали до этого места, то какие-то выводы, наверное, уже сделали самостоятельно. Если же пропустили все детали и сразу перешли к итогам, то вот вам общая результирующая таблица по скорости всех методов:

Итоговая таблица результатов

Само-собой, у каждого из нас свои предпочтения, задачи и тараканы, но для себя я сформулировал выводы после этого тестирования так:

  • ВПР всё ещё главная рабочая лошадка. После прошлогодних обновлений, ускоряющих ВПР, и осенних обновлений вычислительного движка, эта функция заиграла новыми красками и даёт жару по-полной.
  • Не нужно лениться и выделять столбцы целиком — для всех способов без исключения это ухудшает результаты почти в 3 раза.
  • Экзотические способы из прошлого типа СУММПРОИЗВ и СУММЕСЛИ — в топку. Они работают очень медленно и, вдобавок, не поддерживают динамические массивы.
  • Динамические массивы и умные таблицы — это будущее.

К сожалению, у меня не было возможностей полноценно протестировать эти методы на старых версиях Excel и на Excel for Mac (запускать эмуляцию Office на виртуальной машине и тестировать скорость — не есть правильно). Буду благодарен, если вы сможете найти время, чтобы прогнать эти способы на своих ПК и версиях и поделитесь результатами и своими мыслями в комментариях, чтобы вместе мы смогли составить полную картину.

Ссылки по теме

  • Как использовать функцию ВПР для подстановки значений в Excel
  • Функция ПРОСМОТРХ как наследник ВПР
  • 5 вариантов использования функции ИНДЕКС

ВПР на максималках

Время на прочтение
3 мин

Количество просмотров 5.6K

Думаю многие, если не большинство, в курсе, что такое ВПР и его неоспоримая сила при поиске и объединении данных из разных таблиц. Те же, кто достиг просветления, используют не менее полезную функцию ИНДЕКС, чтобы не париться, где там идентификатор: слева или справа.

Ниже будет пост о том, каким еще извращенным способом можно надругаться над excel и вытащить данные из другой таблицы по нестандартным условиям без регистрации и смс дополнительных фишек типа VBA и т.п., только штатный функционал excel.

Итак, что мы имеем:

Таблица раз — со списком значений, который надо обогатить данными

Таблица, которую будем обогащать

Таблица, которую будем обогащать

В другой таблице имеем данные по статусам, которые могут повторяться, и которые связаны с первой таблицей по идентификатору обращения

Фрагмент таблицы, откуда будем вытаскивать данные

Фрагмент таблицы, откуда будем вытаскивать данные

Обычная задача для ВПР или ИНДЕКС звучит, как «мне надо добавить данные из одной таблицы в другую по какому-то критерию или критериям», после чего берем критерий первой таблицы и начинаем искать по нему первое совпадающее значение из другой таблицы и возвращаем значение из искомого столбца:

=ВПР(A2;Лист2!$C$1:$C$170;2;0), где A2 - критерий, Лист2!$C$1:$I$13 - диапазон в котором ищем, 2 - номер столбца, из которого  возвращаем значение, 0 - тип сопоставлениятип 

или вот так:

=ИНДЕКС(Лист2!$B$1:$I$170;ПОИСКПОЗ(Лист1!A3;Лист2!$C$1:$C$170;0);3), где - Лист2!$B$1:$I$170 - диапазон, в кокотором ищем, ПОИСКПОЗ(Лист1!A3;Лист2!$C$1:$C$170;0) - строка, которую ищем, 3 - столбец, откуда возвращаем данные,  

В целом двух этих формул хватит для 90% ситуаций при работе с excel, чтобы подтянуть данные из другой таблицы. Хватит ровно до того момента, пока к нам не присоединится условие с датой, при этом дата будет неизвестной переменной.

Собственно сама задача:

Имеем таблицу с идентификатором, в которую надо вернуть данные из другой таблицы (для моего примера — последний статус и последняя дата статуса) при условии, что запись должна быть последняя из всех записей, связанных с идентификатором

То есть мы оперируем идентификатором и условием, что дата должна быть самая поздняя из возможных записей с совпадающими идентификаторами. Когда меня попросили изобразить это в excel, я сначала начал думать в сторону VBA, так как Googlение проблемы приводило в основном к примерам, как искать записи по нескольким критериям, то есть из исходной таблицы мы берем эти несколько критериев и пытаемся по ним найти соответствующие записи в другой таблицы. Эти варианты не подходили, так как определение последней даты записи должно было происходить также в формуле, и заранее ее значение было неизвестно, ну и плюс она должна быть определена для записей с конкретным идентификатором. VBA тоже не походил, так как человеку надо было отправить просто формулу, чтобы можно было вставить в ячейку.

В итоге с помощью того Googlа и небольшой доработки напильником была рождена формула следующего типа:

{=ИНДЕКС(Лист2!$B$2:$I$170;ПОИСКПОЗ(A4&МАКС(ЕСЛИ(A4=Лист2!$C$2:$C$170;Лист2!$B$2:$B$170;""));Лист2!$C$2:$C$170&Лист2!$B$2:$B$170;);ПОИСКПОЗ("Статус";Лист2!$B$1:$I$1;0))}

Вот он — ВПР на максималках) тут использовано все, чтобы вернуть ту искомую запись в таблице: и массивы, и индекс, и несколько критериев, и условие по дате.
Как это работает:

  1. Используем в формуле ИНДЕКС массивы. При вводе формулы используем сочетание клавиш ctrl+shift+enter

  2. Выделяем просматриваемый диапазон, в моем случае от B2 до I170

  3. Искомую строку определяем по формуле ПОИСКПОЗ, при этом поиск осуществляем по двум условиям A4&МАКС (идентификатор A4 исходной таблицы и максимальное значение даты при равном идентификаторе, значение даты берется из функции ЕСЛИ). Тут важно не забыть, что поиск по нескольким критериям можно задать через & перечислив критерии, а также надо через & перечислить диапазоны, в которых excel будет искать эти критерии, в той же последовательности, что и критерии

  4. Искомый столбец оформил тоже через формулу ПОИСКПОЗ, где формула ищет позицию искомого значения «Статус» в просматриваемом диапазоне заголовков второй таблицы и возвращает таким образом номер столбца, из которого нам надо вытащить значение

Таким способом я смог вытянуть необходимо значения строк для обогащения исходной таблицы

Итоговый результат

Итоговый результат

Зачем этот пост?

Хотел поделиться в сети информацией для будущих искателей решения схожей проблемы, так как мой ТОП операций и функций excel ctrl+c и ctrl+v :) Но мне не подвернулось готового решения, когда я искал. Может кому-то повезет больше с моей помощью.

Это третья глава книги Билла Джелена. Всё о ВПР: от первого применения до экспертного уровня.

Присвойте имя вашей таблице подстановки. Проблема: моя таблица подстановки расположена на другом листе. Формула ВПР может сбивать с толку:

=ВПР(A2;’Таблица подстановки’!$A$1:$B$30;2;ЛОЖЬ)

Стратегия: присвойте имя диапазону, включающему таблицу подстановки. Для этого выделите ячейки А2:В30. Щелкните в поле имя слева от строки формул. Введите простое имя, например, Описание и нажмите Enter. Теперь формула ВПР принимает вид: =ВПР(A2;Описание;2;ЛОЖЬ). Учтите, что имя диапазона не должно содержать пробелов и начинаться с цифры (подробнее см. Excel. Имена диапазонов).

Рис. 3.1. Введите имя таблицы подстановки в поле слева от строки формул

Рис. 3.1. Введите имя таблицы подстановки в поле слева от строки формул

Скачать заметку в формате Word или pdf, примеры в формате Excel

Копирование ВПР на большое число столбцов. Проблема: я использовал ВПР, чтобы извлечь данные за январь. Мне нужно скопировать формулу в одиннадцать столбцов.

Стратегия: чтобы упростить копирование, подготовьтесь к нему:

  • В окне Аргументы функции в поле Искомое_значение введите ссылку, выделите ее и нажмите <F4> три раза. Это приведет к изменению А2 до $А2. Такая смешанная ссылка позволит корректно протащить формулу по столбцам. ВПР всегда будет искать значение в столбце А.
  • В окне Аргументы функции в поле Таблица введите ссылку на диапазон, выделите ее и нажмите <F4> один раз. Таблица подстановки будет иметь четыре знака доллара. Т.е., ВПР после протаскивания формулы всегда будет ссылаться на один и тот же диапазон. Или присвойте таблице подстановки имя, и используйте его в ВПР.

Наибольшая проблема – это третий аргумент. Может быть, проще всего отредактировать формулу, заменяя 2 на 3, потом на 4, на 5, и так далее. Тем не менее, позвольте предложить два более оригинальных метода:

  • Используйте дополнительную строку с числами от 2 до 13. Расположите этот ряд выше таблицы подстановки, которую вы пытаетесь построить (рис. 3.2). Затем, вместо того, чтобы указывать в качестве третьего параметра 2, дайте ссылку, на ячейку, которая вернет значение 2 – B1; выделите ссылку и нажмите <F4> два раза, чтобы изменить его на В$1. При протаскивании формулы сохранится ссылка на первую строку и соответствующий столбец (поэкспериментируйте!).
  • Второе решение еще более изящно. Используйте функцию СТОЛБЕЦ(В1), которая возвращает номер столбца для указанной ячейки. Поскольку В1 находится во второй колонке, функция вернет 2. Я не хочу сказать, что в мире компьютерных фанатов это простейший способ написания цифры 2. Тем не менее, преимущество заключается в том, что при копировании этой формулы вправо, ссылка автоматически изменится на С1, а функция СТОЛБЕЦ(С1) вернет 3. Этот способ позволяет обойтись без значений в строке 1.

Рис. 3.2. Использование дополнительной строки с числами

Рис. 3.2. Использование дополнительной строки с числами

Рис. 3.3. Использование функции СТОЛБЕЦ()

Рис. 3.3. Использование функции СТОЛБЕЦ()

Примечание: это совпадение, что формула в B4 ссылается на СТОЛБЕЦ(В1). Вы используете формулу СТОЛБЕЦ(В1), так как вам нужно число 2 для выборки из таблицы подстановки, а столбец В – это второй столбец рабочего листа. Даже если в таблице на рисунке выше расположить формулу в ячейке XEG4, третий аргумент все равно остался бы СТОЛБЕЦ(В1).

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

Альтернативные стратегии: вы можете ускорить работу если вместо ВПР используете конструкцию из двух функций: ПОИСКПОЗ и ИНДЕКС (см. главу 5).

Преобразуйте таблицу подстановки в инструмент Excel ТАБЛИЦА. Проблема: я постоянно добавляю новые строки в нижнюю часть моей таблицы подстановки. Затем, я должен переписать формулы ВПР для включения новых строк.

Стратегия: использование инструмента ТАБЛИЦА упрощает этот процесс. ТАБЛИЦА автоматически включает в себя вновь добавленные строки и переписывать формулы ВПР не нужно.

Рассмотрим пример. Таблица подстановки (рис. 3.4, область $F$2:$G$5) содержит только четыре строки, по одной для каждого истекшего месяца в году. Новые данные за май (D10:D11) возвращают ошибку #Н/Д, так как мая нет в таблице подстановки.

Рис. 3.4. Мая нет в таблице подстановки, поэтому в основной таблице ошибка

Рис. 3.4. Мая нет в таблице подстановки, поэтому в основной таблице ошибка #Н/Д

При добавлении новых данных в F6:G6, формулы в D10:D11 остаются прежними, ссылаясь лишь на $F$2:$G$5, поэтому ВПР по-прежнему возвращает #Н/Д (рис. 3.5). Однако, если вы измените в ВПР ссылку на таблицу подстановки на $F$2:$G$6 то теперь формула вернет корректный результат.

Рис. 3.5. Май всё еще не является частью таблицы подстановки

Рис. 3.5. Май всё еще не является частью таблицы подстановки, до тех пор, пока вы не перепишите формулы ВПР

Вернемся к первоначальной ситуации (см. рис. 3.4). Кликните на любую ячейку в диапазоне $F$2:$G$5 и нажмите сочетание клавиш Ctrl+Т (Т английское). Excel отображает диалоговое окно создание таблицы. Нажмите Оk (рис. 3.6). Диапазон $F$1:$G$5 автоматически отформатируется, строки получат чередование цветов, в заголовках появятся раскрывающиеся фильтры, в правом нижнем углу правой нижней ячейки ТАБЛИЦЫ появится маленький треугольник (если за него потянуть, область ТАБЛИЦЫ расширится), появится новая вкладка на ленте Excel: РАБОТА С ТАБЛИЦАМИ –> КОНСТРУКТОР (рис. 3.7).

Рис. 3.6. Определите диапазон F1_G5 в виде ТАБЛИЦЫ.

Рис. 3.6. Определите диапазон $F$1:$G$5 в виде ТАБЛИЦЫ

Рис. 3.7. Отформатированная ТАБЛИЦА

Рис. 3.7. Отформатированная ТАБЛИЦА

Отметим, что на данный момент в оригинальной формуле ВПР ничего не изменилось. Ссылка на таблицу подстановки не переключилась автоматически на ТАБЛИЦУ (рис. 3.8). Отличие рис. 3.4 от рис. 3.8 в том, что во втором случае таблица подстановки превращена в ТАБЛИЦУ. Это заметно по чередованию цветов строк и раскрывающимся фильтрам.

Рис. 3.8. Хотя таблица подстановки преобразована в ТАБЛИЦУ, формула ВПР осталась той же

Рис. 3.8. Хотя таблица подстановки преобразована в ТАБЛИЦУ, формула ВПР осталась той же

Однако, если вы наберете новые данные в F6:G6, ТАБЛИЦА автоматически расширится, чтобы включать в себя ряд 6. Почему-то Excel автоматически обновит формулы ВПР, и включит в них всю таблицу подстановки. Это кажется невероятным, но это так (рис. 3.9).

Рис. 3.9. Формулы ВПР автоматически изменили ссылку на расширенную таблицу подстановки

Рис. 3.9. Формулы ВПР автоматически изменили ссылку на расширенную таблицу подстановки

0 / 0 / 0

Регистрация: 26.09.2016

Сообщений: 150

1

Аналоги или ускорение ВПР через макрос

12.08.2017, 20:31. Показов 24553. Ответов 27


Студворк — интернет-сервис помощи студентам

Есть лист, в который простейшим ВПР-ом подтягиваются данные из другого листа. Но…на листе оооочень большое количество строк (от 300 000 и далее), соответственно ВПР виснет часа на 4, а то и больше. Возникла мысль сделать все через макрос, но есть нюансы:так как раньше в макросах я не сталкивалась с такими большими данными, то ВПР подтягивала так как прописывалось в макрокодере(но здесь этот вариант явно не прокатит). Вопрос:чем можно заменить или как можно ускорить ВПР в макросе?
P.S. ВПР выглядит следующим образом =ВПР(A1;ОиО!$A$1:$B$642644;2;0). Причем данный ВПР надо растянуть до конца таблицы и количество строк на листе ОиО тоже меняется (то есть тут скорее всего надо задавать диапазон переменной). И главным приоритетом является ускорение процесса (ну хотя бы до 30 минут)

Прошу помощи, так как нахожусь в растерянности и не понимаю куда именно надо обратить свое внимание.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

12.08.2017, 20:31

Ответы с готовыми решениями:

ВПР или макрос?
Уважаемые, добрый день!

25.05.2013 A 22334
25.05.2013 E 232345
25.05.2013 H 454545…

Макрос с впр
Добрый день! Вновь надеюсь на вашу помощь!
Имеется таблица с данными &quot;РТП 1&quot; из нее нужно удалить…

Макрос вместо ВПР
Добрый день, уважаемые форумчане!
Подскажите, пожалуйста, макрос, который мог бы заменить формулу…

Макрос впр по 3 столбцам
Здравствуйте!!!!
— Помогите преобразовать макрос впр с рекордера в нормальный вид.
— вместо 0 и…

27

kalbasiatka

414 / 262 / 82

Регистрация: 27.10.2012

Сообщений: 860

12.08.2017, 20:50

2

Не 30 минут, но всё же вариант

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub uuu()
    Dim a()
    Dim i&
    Dim sd As Object
'---------------------
    a = Sheets(1).UsedRange.Value
    Set sd = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(a)
        sd.Item(a(i, 1)) = a(i, 2)
    Next
    a = Sheets(2).UsedRange.Value
    ReDim Preserve a(1 To UBound(a), 1 To 2)
    For i = 1 To UBound(a)
        If sd.Exists(a(i, 1)) Then a(i, 2) = sd.Item(a(i, 1))
    Next
    Sheets(2).Cells(1, 1).Resize(UBound(a), UBound(a, 2)) = a
    Beep
    MsgBox "Готово!"
End Sub



0



0 / 0 / 0

Регистрация: 26.09.2016

Сообщений: 150

12.08.2017, 21:24

 [ТС]

3

А можете подписать какая строка за что отвечает?

Добавлено через 18 минут
К сожалению при проверке оказалось, что к некоторым значениям нужные данные не подтягиваются. Есть какое-либо ограничение в данном коде?(хотя по скорости все шикарно)



0



kalbasiatka

414 / 262 / 82

Регистрация: 27.10.2012

Сообщений: 860

12.08.2017, 22:10

4

Цитата
Сообщение от Makroshka
Посмотреть сообщение

Есть какое-либо ограничение

Регистр, лишние символы (пробелы например)
Не смотрим на регистр и убираем пробелы по краям, чуть медленнее.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub uuu()
    Dim a()
    Dim i&
    Dim sd As Object
    Dim k
'---------------------
    a = Sheets(1).UsedRange.Value
    Set sd = CreateObject("Scripting.Dictionary")
    sd.CompareMode = vbTextCompare
    For i = 1 To UBound(a)
        k = Trim(a(i, 1))
        sd.Item(k) = a(i, 2)
    Next
    a = Sheets(2).UsedRange.Value
    ReDim Preserve a(1 To UBound(a), 1 To 2)
    For i = 1 To UBound(a)
        k = Trim(a(i, 1))
        If sd.Exists(k) Then a(i, 2) = sd.Item(k)
    Next
    Sheets(2).Cells(1, 1).Resize(UBound(a), UBound(a, 2)) = a
    Beep
    MsgBox "Готово!"
End Sub



0



0 / 0 / 0

Регистрация: 26.09.2016

Сообщений: 150

12.08.2017, 22:23

 [ТС]

5

Спасибо, все заработало)))



0



Makroshka

0 / 0 / 0

Регистрация: 26.09.2016

Сообщений: 150

29.08.2017, 10:51

 [ТС]

6

Я создала для данного кода форму, чтобы он был более универсальным, но высвечивает ошибку при определенных условиях. Если значение для переменной Col2 равно 3,4 и т.д., то выделяет эту строку в коде

Visual Basic
1
If sd.Exists(k) Then a(i, Col2) = sd.Item(k)

а именно

Visual Basic
1
a(i, Col2) = sd.Item(k)

Я не понимаю почему так выходит. При том если указывать у той переменной значение 2, то все работает корректно. Может кто-нибудь объяснить на что возмущается код?

Файл с кодом и формой во вложении.

Вложения

Тип файла: 7z Пример.7z (17.2 Кб, 83 просмотров)



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

29.08.2017, 11:14

7

1. по коду — ReDim Preserve время ворует, можно ведь сразу просто взять два столбца от диапазона.
2. по ошибке — архив скачать не могу, но думаю ошибка потому, что размер массива не «3,4 и т.д.» столбцов.



0



Makroshka

0 / 0 / 0

Регистрация: 26.09.2016

Сообщений: 150

30.08.2017, 11:26

 [ТС]

8

2. по ошибке — архив скачать не могу, но думаю ошибка потому, что размер массива не «3,4 и т.д.» столбцов.

3,4 и т.д. это не диапазон,а номер столбца (по крайней мере по моей задумке).

1. по коду — ReDim Preserve время ворует, можно ведь сразу просто взять два столбца от диапазона.

А как это будет выглядеть без ReDim (я ведь правильно понимаю, что это сброс значения переменной?)?

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Private Sub lsbTypes1_Change()
 
End Sub
 
Private Sub UserForm_Initialize()
    Dim Sheet As Object
    For Each Sheet In ActiveWorkbook.Sheets
        Me.lsbTypes1.AddItem (Sheet.Name)
        Me.lsbTypes2.AddItem (Sheet.Name)
    Next
End Sub
 
Private Sub CommandButton1_Click()
Dim a()
    Dim i&
    Dim sd As Object
    Dim k
    Dim Col1
    Dim Col2
    Dim Col3
    Dim Col4
    Dim Sh1
    Dim Sh2
'---------------------
 
    Col1 = txtInput1.Text
    Col2 = txtInput2.Text
    Col3 = txtInput3.Text
    Col4 = txtInput4.Text
    Sh1 = lsbTypes1.Text
    Sh2 = lsbTypes2.Text
    
    a = Sheets(Sh2).UsedRange.Value
    Set sd = CreateObject("Scripting.Dictionary")
    sd.CompareMode = vbTextCompare
    For i = 1 To UBound(a)
        k = Trim(a(i, Col3))
        sd.Item(k) = Col4
    Next
    a = Sheets(Sh1).UsedRange.Value
    ReDim Preserve a(1 To UBound(a), 1 To 2)
    For i = 1 To UBound(a)
        k = Trim(a(i, Col1))
        If sd.Exists(k) Then a(i, Col2) = sd.Item(k)
    Next
    Sheets(Sh1).Cells(1, 1).Resize(UBound(a), UBound(a, 2)) = a
    Beep
    MsgBox "Ãîòîâî!"
End Sub

Добавлено через 23 часа 28 минут
Всем спасибо, разобралась почему макрос показывал ошибку…
В этой строке

Visual Basic
1
ReDim Preserve a(1 To UBound(a), 1 To 2)

Вместо 1 to 2, поставила 1 to 30



0



0 / 0 / 0

Регистрация: 06.08.2020

Сообщений: 1

11.08.2020, 12:21

9

Добрый день!

форма получилась очень интересной, для решения моей проблемы самое то. у меня файлы по 600К+ записей.
скорость моментальная по сравнению с обычным ВПР

но есть одна проблема, подскажите как к этому макросу добавить проверку на уже существующую запись?
т.е. в списке по которому ищем могут попадаться дублирующие значения и при проходе он удваивает значения (если значение которое ищем числовое)



0



779 / 461 / 79

Регистрация: 18.05.2016

Сообщений: 1,242

Записей в блоге: 4

11.08.2020, 13:49

10

А я что-то смысл происходящего в форме не понимаю. Синтаксис ВПР:
ВПР(искомое_значение; таблица; номер_столбца; интервальный_просмотр)
На форме ничего похоже нет. Названия полей ввода на ней вводят меня в ступор



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

11.08.2020, 13:49

11

Добрый день!
В этом макросе есть проверка на повтор, и нет нигде удваивания.
Если не так — покажите свой файл. С макросом и данными. Не картинку!



0



779 / 461 / 79

Регистрация: 18.05.2016

Сообщений: 1,242

Записей в блоге: 4

11.08.2020, 15:03

12

Цитата
Сообщение от Hugo121
Посмотреть сообщение

В этом макросе

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



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

11.08.2020, 15:20

13

3 года прошло, думаете я помню? Да и не решал я там ничего… Я просто посмотрел последний код, что в посте 8



0



779 / 461 / 79

Регистрация: 18.05.2016

Сообщений: 1,242

Записей в блоге: 4

11.08.2020, 15:22

14

Просто замысел в чём?
Дофига строк с формулой ВПР, которые надо… что с ними делают?



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

11.08.2020, 15:38

15

В коде нет никаких ВПР.



0



779 / 461 / 79

Регистрация: 18.05.2016

Сообщений: 1,242

Записей в блоге: 4

11.08.2020, 15:42

16

Но каким-то образом ускоряют в диапазоне в 642644 * 2 ячеек
Я тут от безделья сделал заготовку надстройки… Уж очень мне форма этой темы не понравилась. А вот, что происходит по кнопке в той форме, я не понял



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

11.08.2020, 15:44

17

Ну если смотреть на коды (зачем смотреть файл, который просят ускорить?) — ускоряют словарём и массивами.



0



Ученик

87 / 69 / 16

Регистрация: 01.04.2020

Сообщений: 247

11.08.2020, 19:13

18

amd48, Hugo121, я извиняюсь что встреваю в вашу беседу. Здравствуйте. Но форма тупо сравнивает столбцы которые вы укажете на двух листах. И выводит то что вы укажете при совпадение этих двух столбцов на второй лист. ВПР там нет и удваиванние. Сорян если что. Любопытство взяло вверх.



1



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

11.08.2020, 19:16

19

MikeVol, не верю



0



Ученик

87 / 69 / 16

Регистрация: 01.04.2020

Сообщений: 247

11.08.2020, 19:18

20

Hugo121, ну вам гуру Экселя виднее, не спорю.



0



Skip to content

Формула ВПР в Excel — 22 факта, которые нужно знать.

В процессе работы в Excel часто возникает задача извлечения нужных данных из рабочих таблиц. Для этой цели в Excel предусмотрена формула ВПР (VLOOKUP в английском варианте). И хотя ВПР относительно проста в использовании даже для начинающих, есть много вещей, которые могут здесь пойти не так.

Одна из причин заключается в том, что имеется существенный недостаток: по умолчанию предполагается, что вам достаточно не точного, а приблизительного соответствия при поиске. Что, скорее всего, не соответствует вашим пожеланиям. Это может привести к тому, что результаты расчетов выглядят совершенно нормально, даже если они совершенно ошибочны. Поверьте, это НЕ то, что вы хотите объяснить своему боссу, после того, как он уже отправил вашу таблицу руководству :)

Читайте далее и узнайте, как справиться с этой задачей. Прочтите другие советы по оптимизации работы. Особое внимание мы уделим ошибкам, возникающим при использовании формулы ВПР, а также приёмам, которые позволят сделать её использование простым и вместе с тем эффективным. Также мы разберём несколько случаев выбора и поиска данных, в которых продемонстрированы альтернативные методики, позволяющие существенно расширить стандартные возможности Excel.

  1. 1.      Как расшифровывается ВПР в Excel?
  2. 2.      Что делает ВПР?
  3. 3.      Для чего используется ВПР?
  4. 4.      Как расшифровываются параметры ВПР?
  5. 5.      ВПР имеет два режима поиска.
  6. 6.      Внимание: неточный поиск включен по умолчанию!
  7. 7.      Для приблизительного поиска данные должны быть отсортированы.
  8. 8.      ВПР ищет только справа.
  9. 9.      ВПР пригодится, чтобы объединять данные из разных таблиц.
  10. 10. Может помочь классифицировать данные.
  11. 11. Абсолютные ссылки облегчают и ускоряют работу.
  12. 12. Именованные диапазоны облегчают понимание расчетов и еще больше упрощают работу.
  13. 13. Вставка столбца может «сломать» ваши вычисления.
  14. 14. Индекс столбца можно рассчитать автоматически
  15. 15. Используйте ВПР + ПОИСКПОЗ для полностью динамического индекса столбца
  16. 16. Можно использовать символы подстановки для определения частичного соответствия.
  17. 17. Вместо ошибки #Н/Д можно показать любое сообщение
  18. 18. Числа, записанные как текст, могут стать причиной ошибки.
  19. 19. ВПР нужна для замены вложенных операторов ЕСЛИ.
  20. 20. Можно использовать только один критерий.
  21. 21. Два ВПР быстрее, чем один.
  22. 22. ИНДЕКС и ПОИСКПОЗ могут больше и лучше, чем ВПР.

Итак, что такое ВПР в Excel?  

1.      Как расшифровывается ВПР в Excel?

Запомнить назначение формулы несложно: ВПР (VLOOKUP) переводится как сокращение «Вертикальный ПРосмотр» или на английском — “Vertical Look Up”.

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

Термин «вертикальный», означает, что показатели в таблице должны быть расположены вертикально, а данные — по строкам. А для горизонтально структурированных данных используется ГПР (HLOOKUP на английском). Как вы, думаю, догадываетесь, ГПР расшифровывается как «горизонтальный просмотр». В общем, то же самое действие, но по горизонтали.

2.      Что делает ВПР?

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

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

Необходимо, чтобы таблица была создана таким образом, чтобы значения поиска располагались в крайнем левом столбце. Скажем, названия товаров. Данные, которые вы хотите получить (результирующие значения), могут быть записаны в любом месте, находящемся правее. А правее в этой таблице могут значиться артикул товара, его вес, цена, количество и т.д. Мы движемся по первому столбцу сверху вниз, и как только находим что-то подходящее, то останавливаемся на этой строке и берем данные из какого-то из столбцов, находящихся правее. Нужно только указать, из какого по счету.

3.      Для чего используется ВПР?

Эти действия подобны розыску нужного номера в телефонном справочнике. Для этого вы сначала листаете справочник, чтобы обнаружить искомую фамилию и, только обнаружив ее, получаете номер телефона. Или же вы просматриваете прайс-лист, и напротив нужного товара видите его цену.

Таким образом, ВПР нужна, чтобы найти в Экселе определенную информацию в одной таблице и вставить ее в определенное место в другую.

Еще раз сделаем важное замечание: поиск всегда происходит в первом (крайнем левом) столбце.

Именно это ограничение и не позволяет считать ее универсальным решением. Но все же возможности применения очень широки.

Синтаксис ВПР позволят нам применять ее для очень большого круга задач, при котором необходимо найти и вернуть определённое значение.

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

4.      Как расшифровываются параметры ВПР?

Чтобы лучше понять, что такое ВПР в Excel, давайте для начала просто попробуем создать ее на нашем рабочем листе.

Устанавливаем курсор в нужную ячейку, в которую нужно вставить цену из прайс-листа по определенному товару. Нажимаем на значок возле строки формул и в категории «Ссылки и массивы» находим ВПР.

Либо просто ставим «=» и начинаем писать название. И  тут же появляется выпадающий список подходящих функций. Выбираем нужную.

Затем в открывшемся окне заполняем все параметры. Их вы видите на рисунке выше.

ВПР(искомое; таблица; номер_столбца; параметр_просмотра)

  • Искомое — то, что ищем.
  • Таблица — диапазон ячеек, в котором ищем и из которого затем извлекаем данные.
  • Номер_столбца — номер столбца диапазона, из которого возвращаются данные, если значение в первом столбце данной строки совпадает с аргументом искомое_ значение.
  • Интервальный_просмотр — необязательный, но очень важный логический аргумент. О нем мы поговорим ниже.

5.      ВПР имеет два режима поиска.

Четвертый параметр «интервальный просмотр» позволяет задать режим сравнения, в котором нужно работать – точный или приблизительный. Это логический параметр, то есть для него возможно 2 варианта:

  • 0 или ЛОЖЬ – интервальный просмотр выключен (ищем точное соответствие)
  • 1 или ИСТИНА – интервальный просмотр включен (достаточно приблизительного)

Если этот параметр — ЛОЖЬ, то ищется точное равенство в первом столбце с аргументом «искомое». Если же такого нет, воз­вращается ошибка #Н/Д. Точный режим нужен, когда вы хотите найти информацию, основанную на каком-то уникальном ключе. Скажем, информацию о товаре — по коду товара, или данные фильма по его названию, человека — по фамилии.

Если он равен ИСТИНА или вовсе пропущен, то допускается неточное совпадение в данных отсортированной таблицы с аргументом «искомое». То есть нам нужно «лучшее соответствие», «как можно самое близкое».  Возможно, вы просматриваете почтовые тарифы по весу посылки, ищете налоговую ставку на основе дохода, или определяете скидку на основе ежемесячного объема продаж. В этих случаях вы, скорее всего, не найдете именно ваш вес либо точную цифру вашего дохода.  А если точного нет, то принимается ближайшее подходящее значение.

Обратите внимание, что при этом предполагается, что наш перечень отсортирован по столбцу поиска.

6.      Внимание: неточный поиск включен по умолчанию!

К сожалению, четвертый аргумент является необязательным и по умолчанию имеет значение ИСТИНА. Это означает, что программа ищет не именно ваше, а просто похожее значение по умолчанию, даже если вы указали только 3 аргумента.

Если аргумент используется ЛОЖЬ (или ноль), то сортировка не обязательна, поскольку ищется точное соответствие.

Это часто создает проблемы, потому что многие люди невольно оставляют ВПР в режиме по умолчанию, забывают точно указать, как именно они хотят искать. А это может привести к неверному результату, если в данных не было сортировки. То есть, программа обнаружит первое подходящее значение и прекратит поиск. Допустим, мы ищем «апельсин», а первым в списке числится «банан». Эксель решит, что после слова на букву Б нет смысла искать апельсин, ведь список должен быть отсортирован по алфавиту. А если вы не сделали сортировку, то ваш апельсин вполне может находиться где-то ниже в списке. Но найти его уже не удастся. Результат — ошибка в заполнении таблицы с товарами и ценами.

Чтобы избежать этой проблемы, обязательно используйте ЛОЖЬ или ноль в качестве 4-го аргумента, когда нужен именно точный поиск.

В подавляющем большинстве случаев используется точное сравнение: если в прайс-листе найдется точно такое же название товара, то программа выведет его цену. В противном случае мы получим ошибку #N/A.

Вы спросите – а зачем же тогда этот параметр, если его значение ИСТИНА (TRUE) или же отсутствие приводит к таким проблемам? Ответ заключается в том, что если всё же вы будете применять её на отсортированном массиве, то производительность и скорость вычислений возрастут по разным оценкам где-то в 50 (пятьдесят!) раз. При работе с большими объемами данных это будет очень заметно.

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

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

7.      Для приблизительного поиска данные должны быть отсортированы.

Если аргумент интервальный_просмотр равен ИСТИНА или опущен, то для правильной работы данные должны быть упорядоченны по возрастанию. Сортировка производится по тому столбцу, в котором ищем, то есть по первому. Если сортировку не сделать, то как только будет найдено значение большее, чем искомое, то процесс будет прекращен, несмотря на то, что ответ будет находиться чуть ниже.

Если ваш критерий начинается с буквы “A” (апельсин), а в начале списка находится слово, начинающееся с буквы “C” (допустим, сливы), то, оценив это, Эксель решит, что если встретилась буква “C”, то в списке букву “A” дальше искать бессмысленно. Работа остановится и будет возвращена ошибка #Н/Д (#N/A в англоязычной версии), несмотря на то, что правильное наименование в вашем списке было, но чуть ниже. Но вы об этом даже не узнаете.

Может случиться и другое – будет найден товар с похожим названием, сотрудник с похожей фамилией. В случае, если вы ищете конкретного человека либо конкретный товар, вряд ли вас устроит такой приблизительный поиск. Но самое плохое заключается в том, что вы не узнаете о том, что найдено просто первое похожее. А это может привести к ошибкам в принятии решений на основе ваших расчетов.

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

8.      ВПР ищет только справа.

Возможно, самым большим ограничением ВПР является то, что она может искать только вправо от ключевого столбца.

Это означает, что вы сможете получить данные только из колонок, находящихся справа от первого столбца. Когда значения поиска находятся в первом (крайнем левом) столбце, это ограничение не имеет большого значения, поскольку все остальные уже находятся справа. Однако, если область поиска находится внутри таблицы, вы сможете искать значения только справа от неё. Вам также нужно будет в качестве источника данных брать не всю таблицу, а только ее часть, которая начинается с области поиска.

Впрочем, это ограничение можно преодолеть, о чем мы также вам расскажем.

9.      ВПР пригодится, чтобы объединять данные из разных таблиц.

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

Поскольку наименование товара имеется в обеих таблицах, то вы можете использовать его в качестве ключа поиска, чтобы получить нужную цену.

Обратите также внимание, что даже точный поиск можно сделать немного приблизительным, используя знаки подстановки * и ?. Напомню, что знак вопроса заменяет собой любой один символ, а звездочка — любое количество знаков (в том числе и ноль). Таким вот образом мы обнаружили в перечне товаров персики, записав в условии поиска «*»&»персики»&»*» или же «*»&D2&»*».

10. Может помочь классифицировать данные.

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

Классическим случаем являются оценки, где вам нужно определить результат на основе набранных баллов:

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

11. Абсолютные ссылки облегчают и ускоряют работу.

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

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

12. Именованные диапазоны облегчают понимание расчетов и еще больше упрощают работу.

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

Копировать и переносить их также можно без проблем.

В приведенном выше примере с данными о сотрудниках вы можете назвать входную ячейку B2 «фамилия», а затем выделить все ячейки с информацией и назвать диапазон B5:F100 как «ДанныеСлужащего». Затем перепишите свою формулу в C2 следующим образом:

=ВПР(фамилия;ДанныеСлужащего;2;ЛОЖЬ)

Сравните сами — насколько понятнее стал расчет из совета №12 по сравнению с №11.

13. Вставка столбца может «сломать» ваши вычисления.

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

Здесь вы видите результаты для отдела, когда код сотрудника и даты стали неверными, когда был вставлен новый столбец D между именем и отделом. Имя же человека по-прежнему было взято правильное, потому что находится слева от места вставки.

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

14. Индекс столбца можно рассчитать автоматически

Вы можете использовать функцию СТОЛБЕЦ() для генерации динамических индексов. Если вы получаете данные из последовательных колонок, этот трюк позволяет настроить одну первую формулу ВПР, а затем просто скопировать ее, не меняя ничего руками.

Посмотрите, как мы можем использовать функцию СТОЛБЕЦ  (COLUMN в английском варианте) для создания динамического индекса. Для первой формулы в ячейке C3 нам нужен номер столбца 2. Поэтому запишем:

=ВПР($B$2;$B$5:$G$100;СТОЛБЕЦ()-1;ЛОЖЬ)

Поскольку столбец C является третьим на листе, поэтому нам просто нужно вычесть 1 и получить 2.

Далее просто скопируйте из C3 в D3, E3, F3.

15. Используйте ВПР + ПОИСКПОЗ для полностью динамического индекса столбца

Усовершенствовав предыдущий совет, вы можете использовать ПОИСКПОЗ для определения позиции столбца и возврата полностью динамического его индекса (порядкового номера).

Иногда это называется двусторонним поиском, поскольку вы просматриваете как по вертикали, так и по горизонтали.

Пригодиться это может при вычислении продаж для продавца в конкретном месяце или выборе цены на конкретный продукт от конкретного поставщика.

Предположим, что у вас есть продажи за месяц, с разбивкой по менеджерам.

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

При этом давайте еще попробуем использовать именованные диапазоны. Так нам будет проще разобраться.

Итак, A7:D17 присвоим имя «данные». A6:D6 назовем «месяц».

В результете в G8 мы можем записать:

=ВПР(G6;данные;ПОИСКПОЗ(G7;месяц;0);0)

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

16. Можно использовать символы подстановки для определения частичного соответствия.

Каждый раз, когда вы используете ВПР в режиме точного поиска, у вас есть возможность использовать подстановочные знаки в поисковом значении. Это может показаться нелогичным, но эти знаки позволяют найти точное совпадение на основе частичного совпадения :)

Если аргумент «искомое» является текстом и интервальный_просмотр имеет значение ЛОЖЬ, то для обнаружения точного совпадения можно использовать символы подстановки * и ?.

  • * (звездочка) – любое количество любых символов (в том числе и их полное отсутствие)
  • ? (вопросительный знак) – один любой символ.

Но будьте внимательны с этими знаками. Как только будет найдено что-то подходящее, дальше искать уже не будет.

Они дают вам простой способ создать «ленивый поиск», но они также позволяют ошибиться.

17. Вместо ошибки #Н/Д можно показать любое сообщение

В режиме точного совпадения ВПР отобразит ошибку #Н/Д, если ничего не найдено. С одной стороны, это полезно, потому что оно однозначно говорит вам, что нет подходящих данных. 

Иногда это не очень удобно, поскольку такие ошибки #Н/Д потом порождают новые ошибки при попытке рассчитать сумму, попадают в распечатку и т.д. Можно легко перехватить их и заменить на любое другое подходящее значение (скажем, на ноль) с помощью функции ЕСЛИОШИБКА (IFERROR).

Далее мы рассмотрим обработку ошибок более подробно.

18. Числа, записанные как текст, могут стать причиной ошибки.

Иногда таблица, с которой вы работаете, может содержать числа, введенные в виде текста.  И если вы ищете именно число, то совпадений не обнаружите.

В этом случае артикул 99023 записан в одном случае как текст, в другом – как число. Поэтому и видим ошибку #Н/Д.

Чтобы решить эту проблему, необходимо убедиться, что критерий поиска и первая колонка имеют одинаковый тип данных (либо оба числа, либо оба текста).

Один из способов сделать это — преобразовать значения в диапазоне поиска в числа. Простой способ сделать это — прибавить ноль к каждому из них с помощью инструмента специальной вставки.

Читайте подробнее — как преобразовать текст в число.

И наоборот, можно преобразовать критерий поиска в текст, присоединяя пустой пробел («») следующим образом:

= ВПР(D6&»»,A3:A21,2,0)

Если вы не уверены, когда у вас будут цифры, а когда будет текст, вы можете использовать оба варианта, заключив ВПР в ЕСЛИОШИБКА и написав выражение для обработки обоих случаев:

=ЕСЛИОШИБКА(ВПР(D6,A3:A21,2,0);ВПР(D6&»»,A3:A21,2,0))

А вообще об ошибках мы будем говорить в отдельной статье. Ссылки смотрите внизу.

19. ВПР нужна для замены вложенных операторов ЕСЛИ.

Одним из наиболее интересных применений ВПР является замена вложенных операторов ЕСЛИ. Наверняка вы когда-либо создавали серию вложенных как матрешки друг в друга условий и заметили, что они работают нормально, но требуют большого количества скобок. Запутаться и сделать логическую ошибку тут очень легко.

Обычное использование вложенных ЕСЛИ — это расчет процента скидки или уровня налоговой ставки на основе соответствующей шкалы.

В приведенном ниже скриншоте вы можете сравнить использование вложенной ЕСЛИ и то, что можно сделать при помощи функции ВПР.

Полная вложенная формула ЕСЛИ выглядит следующим образом:

=ЕСЛИ(B1>50000,01;20%;ЕСЛИ(B1>30000,01;17%;ЕСЛИ(B1>20000,01;15%; ЕСЛИ(B1>10000,01;13%;ЕСЛИ(B1>2000,01;12%;10%)))))

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

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

=ВПР(B1;D2:F7;3;1)

Обратите внимание, что используется интервальный поиск.

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

20. Можно использовать только один критерий.

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

Это означает, что вы не можете легко сделать такие вещи, как поиск сотрудника с фамилией «Петров» в «Бухгалтерии» или поиск сотрудника на основе имени и фамилии, если они записаны в отдельных столбиках.

Однако существуют способы преодоления этого ограничения. Одним из простых обходных путей является создание вспомогательного столбца, который объединяет значения из разных колонок для создания новых значений поиска. 

Об этом и других способах борьбы с этим ограничением читайте на нашем сайте в специальных инструкциях. Ссылки вы можете найти в конце этого материала.

21. Два ВПР быстрее, чем один.

Это может показаться совершенно невероятным, но когда у вас большой набор данных и вам необходимо найти точное совпадение, вы можете значительно ускорить вычисления, добавив еще один ВПР в формулу!

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

= ВПР(заказ_ID, заказ_данные, 5,ЛОЖЬ)

То есть, мы ищем точное совпадение. Если номер заказа не будет найден, то получим ошибку #Н/Д.

Проблема в том, что точные совпадения действительно ищутся медленно, потому что Excel должен перебирать последовательно через все значения, пока не найдет искомое (или нет).

И наоборот, приблизительные совпадения молниеносны, потому что Excel может выполнять то, что называется бинарным поиском.

Однако проблема с этим двоичным поиском состоит в том, что Excel может возвращать неправильный результат, когда номер заказа не найден.  Он просто возьмет наиболее похожий и близкий, что вряд ли вас устроит. Хуже того, ответ может выглядеть совершенно нормально, поэтому ошибку очень сложно обнаружить.

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

Окончательное выражение выглядит так:

= ЕСЛИ(ВПР(заказ_ID, заказ_данные, 1,ИСТИНА)=заказ_ID; ВПР(заказ_ID,заказ_данные,5,ИСТИНА);»Не найдено»)

То есть, мы сначала ищем и извлекаем номер заказа. И если результат этого поиска точно совпадает с критерием, повторяем еще раз, но теперь уже извлекаем именно сумму заказа.

Примечание: ваши данные должны быть отсортированы, чтобы использовать этот способ.

22. ИНДЕКС и ПОИСКПОЗ могут больше и лучше, чем ВПР.

Если вы будете читать о работе в Excel, то вы, вероятно,  столкнетесь с дебатами «ВПР или ИНДЕКС+ПОИСКПОЗ ?».  Спор может быть на удивление горячим :)

Суть в следующем: ИНДЕКС+ПОИСКПОЗ может делать все, что может делать ВПР (и ГПР), с гораздо большей гибкостью, но за счет немного большей сложности. 

Таким образом, те, кто поддерживает ИНДЕКС и ПОИСКПОЗ, будут утверждать (и очень разумно), что вы могли бы также начать их изучать, так как в итоге это дает вам лучший набор инструментов.

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

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

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

[the_ad_group id=»48″]

Еще об использовании функции ВПР:

Поиск ВПР нескольких значений по нескольким условиям В статье показаны способы поиска (ВПР) нескольких значений в Excel на основе одного или нескольких условий и возврата нескольких результатов в столбце, строке или в отдельной ячейке. При использовании Microsoft…
Функция ЕСЛИОШИБКА – примеры формул В статье описано, как использовать функцию ЕСЛИОШИБКА в Excel для обнаружения ошибок и замены их пустой ячейкой, другим значением или определённым сообщением. Покажем примеры, как использовать функцию ЕСЛИОШИБКА с функциями визуального…
Как объединить две или несколько таблиц в Excel В этом руководстве вы найдете некоторые приемы объединения таблиц Excel путем сопоставления данных в одном или нескольких столбцах. Как часто при анализе в Excel вся необходимая информация собирается на одном…
Вычисление номера столбца для извлечения данных в ВПР Задача: Наиболее простым способом научиться указывать тот столбец, из которого функция ВПР будет извлекать данные. При этом мы не будем изменять саму формулу, поскольку это может привести в случайным ошибкам.…
4 способа, как сделать левый ВПР в Excel. Функция ВПР – одна из самых популярных, когда нужно найти и извлечь из таблицы какие-либо данные. Но при этом она имеет один существенный недостаток. Поиск она производит в крайнем левом…
Почему не работает ВПР в Excel? Функция ВПР – это очень мощный инструмент поиска. Но если он по каким-то причинам завершился неудачно, то вы получите сообщение об ошибке #Н/Д (#N/A в английском варианте). Давайте постараемся вместе…
ВПР с несколькими условиями: 5 примеров. Очень часто наши требования к поиску данных не ограничиваются одним условием. К примеру, нам нужна выручка по магазину за определенный месяц, количество конкретного товара, проданного определенному покупателю и т.д. Обычными…

Понравилась статья? Поделить с друзьями:
  • Как ускорить word 2019
  • Как ускорить microsoft word
  • Как управлять ссылками в word
  • Как ускорить for в vba excel
  • Как управлять программой excel