ПОЧЕМУ в решениях EXCELSOFT НЕ ИСПОЛЬЗУЮтся ФУНКЦИИ ВПР, ГРП
Функция ВПР и ее «сестра» ГПР очень популярна и любима пользователями Excel. Далее мы будем говорить про ВПР имея ввиду обе функции.
Напомню, что функция ВПР ищет значение в крайнем левом столбце заданного диапазона и возвращает значение в указанной столбце этой же строки. Проще говоря, ВПР работает подобно телефонному справочнику, когда по фамилии абонента можно найти его телефон, адрес, должность, номер кабинета и т.д. Функция ГПР делает то же что и ВПР, но для столбцов и строк соответственно.
ВПР очень часть применяют для подстановки значений при ведении реестров учета, заполнении бланков документов и т.д. Но я практически не использую функции ВПР, и в 99% случаях пользуюсь комбинацией функций ИНДЕКС и ПОИСКПОЗ.
На это есть 3 причины:
1. При подстановке значения из двух и более столбцов комбинация функций ИНДЕКС и ПОИСКПОЗ по скорости начинает обыгрывать функцию ВПР.
Например, вы ведете в Excel журнал продаж. При вводе наименования товара с помощью функции ВПР в журнал можно «подтянуть» его характеристики: вес, цвет, цену, срок годности и т.д., то есть не придется вводить эти данные вручную.
Алгоритм работы ВПР состоит из двух последовательных этапов:
- Поиск искомого значения, в нашем случае наименование товара в справочнике, и определения его порядкового номера строки в таблице, в которой он находится.
- Подстановка из справочника товаров характеристик товара из строки с найденным порядковым номером.
Причем поиск – наиболее ресурсоемкая и продолжительная часть алгоритма. Например, если вы по наименованию товара вытаскиваете 10 его характеристик, по применяя ВПР Excel будет 10 раз искать этот товар с таким наименованием номер и столько же раз подставлять по номеру его реквизиты.
Не проще ли найти порядковый номер один раз, сохранить его в служебной ячейке и 10 раз использовать при подстановке, 9 раз миновав ресурсоемкую процедуру поиска?
Реализовать это можно с помощью двух функций ПОИСКПОЗ и ИНДЕКС, где:
- ПОИСКПОЗ – функция, которая ищет заданное значение в колонке и возвращает его порядковый номер;
- ИНДЕКС – возвращает значение из заданной колонки по порядковому номеру.
Таким образом, ВПР - это то же самое, что и ПОИСКПОЗ вложенный в ИНДЕКС.
Давно читал на официальном сайте компании Microsoft, что функция ВПР работает примерно на 5% быстрее, чем комбинация функций ПОИСКПОЗ и ИНДЕКС. Поэтому ВПР действительно немного выгоднее применять, когда по искомому значению вы вытаскиваете из таблицы лишь значения из одного столбца. Но это бывает крайне редко. Если подставляются значения из двух и более столбцов, то комбинация ПОИСКПОЗ и ИНДЕКС по скорости начинает значительно обыгрывать ВПР.
2. Порядковые номера, которая рассчитывается функцией ПОИСКПОЗ, сохраняются в отдельном служебном столбце и дальнейшем используются не только для подстановки значений в функции ИНДЕКС, но и при формировании управленческих отчетов в формулах массива СУММ, СУММЕСЛИМН, СУММПРОИЗВ. Это значительно ускоряет работу формул массива, т.к. с числовыми аргументами формулы работают значительно быстрее чем с текстовыми. Более подробно об этом в статье Как ускорить работу формул массива.
3. Порядковые номера, рассчитанные функцией ПОИСКПОЗ, также используются для поиска ошибок во введенных данных.
Если ВПР или ПОИСКПОЗ не найдут заданное значение, то они выдадут ошибку Н/Д. Если результат вычисления используется в других формулах, то все связанные ячейки друг за другом покроются значениями Н/Д и искать источник ошибки придется очень долго.
Поэтому рекомендуется помещать эти функции внутрь функции ЕСЛИОШИБКА () и в случае ошибки выводить 0, <ПУСТО> или сообщение об ошибке. Этот совет иначе как вредным не назовешь - выводя 0 или <Пусто> вы фактически замаскируете ошибку. Но она никуда не денется. Более подробно о том, как отлавливать ошибки - в статье Как организовать контроль вводимых данных.
Совет
Используйте функции ВПР, ГПР только если вы подставляете значение из одной колонки и в дальнейшем не используете и не планируете использовать эти данные при формировании отчетов формулами массивов. Но это бывает крайне редко
Во всех остальных случаях используйте комбинацию функций ИНДЕКС и ПОИСКПОЗ.
В большинстве программ ExcelSoft функции ВПР, ГПР не использовались ни разу!