Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР
Многие из вас встречались с этой полезной функцией MS Excel ВПР (VLOOKUP). Это, безусловно, очень полезный инструмент агрегации и трансформации данных. Но, к сожалению, данная функция имеет ряд ограничений. Ниже мы рассмотрим несколько трюков, которые позволят нам преодолеть эти ограничения.
Первое ограничение функции ВПР - это обязательный параметр "номер_столбца" ("col_index_num").
Он определяет какие данные функция ВПР вернет в результате. Использование в качестве номера столбца в функции числа может негативно сказаться на удобстве последующего использования и изменения формул и расчетов. Например, добавление одной колонки в искомом массиве "сломает" формулу, т.к. параметр "номер_столбца" в ней остается неизменным.
Как видно из примера выше, вместо данных из столбца Data функция вернула данные из столбца Class, т.к. он теперь стал вторым относительно столбца Name.
Также нужно иметь в виду, что если через ВПР агрегируется несколько элементов данных, то в случае внесения корректировок в массив данных потребуется вносить ручные правки во все параметры "номер_столбца".
Чтобы избежать этих трудозатратных манипуляций, можно использовать функцию ПОИСКПОЗ (MATCH). Она позволяет определить позицию искомого поля в массиве поиска.
где бы оно не находилось...
Дополнительным бонусом от использования функции ПОИСКПОЗ в данном случае будет еще и легко изменяемое искомое поле данных. Нужно просто поменять первый параметр "искомое_значение" ("lookup_value") функции ПОИСКПОЗ (в приведенном примере это ячейка В1).
Второе ограничение функции ВПР - обязательное требование о расположении в массиве поиска столбца с искомыми значениями строго слева от столбцов с данными. Если столбец с искомыми значениями (столбец Name в примере) не первый слева направо, то функция ВПР не вернет никаких данных из столбцов с данными (столбцы Class Data в примере).
Чтобы обойти это ограничение, надо воспользоваться функцией СМЕЩ (OFFSET) вместо функции ВПР. Данная функция состоит из трех обязательных параметров: ссылка (reference), смещение по строкам (rows), смещение по столбцам (cols). СМЕЩ возвращает значение ячейки, расположенной в X строках (смещение по строкам) и в Y столбцах (смещение по столбцам) от указанной ячейки (ссылка). Но чтобы получить максимальный эффект от этой функции, ее следует использовать вместе с двумя функциями ПОИСКПОЗ вместо параметров смещение по строкам и смещение по столбцам.
ВАЖНО! Пожалуйста, не забывайте, что функция ПОИСКПОЗ возвращает порядковый номер ячейки с искомым значением в массиве, когда как в функции СМЕЩ смещение по строкам и смещение по столбцам - это количество шагов от начальной ячейки. Т.е. необходимо в обязательном порядке вычесть 1 из полученных функциями ПОИСКПОЗ результатов.
Итак, получаем формулу следующего вида:
СМЕЩ(начальная ячейка; ПОИСКПОЗ(искомое значение; массив поиска; тип сопоставления) - 1; ПОИСКПОЗ(искомое значение; массив поиска; тип сопоставления) - 1)
В результате мы имеем довольно-таки гибкое решение, не зависящее от позиции столбцов в массиве данных. Также имея это решение, мы можем легко переключаться с одного столбца данных на другой.
Для того, чтобы сделать эту формулу супергибкой и чтобы легко менять не только данные с результатами (Class и Data в примере), но и искомые данные (Name в примере), нужно поместить внутрь первой функции ПОИСКПОЗ (вместо искомое значение) еще одну функцию СМЕЩ с функцией ПОИСКПОЗ внутри. Такая формула будет самостоятельно определять столбец с искомыми значениями на основании значения ячейки А1. Таким образом, модифицированная формула будет иметь следующий вид:
СМЕЩ(начальная ячейка; ПОИСКПОЗ(искомое значение; СМЕЩ(начальная ячейка; 0, ПОИСКПОЗ(искомое значение; массив поиска; тип сопоставления) - 1); массив поиска; тип сопоставления) - 1; ПОИСКПОЗ(искомое значение, массив поиска, тип сопоставления) - 1)
Выглядит сложно, но при построении сложных гибких решений - вещь очень удобная.
Индекс проще, имхо.
Класс, только я так и не узнал что делает и зачем мне нужно ВПР.