Предположим, что у Вас есть вот такой файл по продажам региональных менеджеров:
Из него Вам необходимо извлечь все уникальные фамилии продавцов. Т.е. должен получиться такой список:
Козлов |
Смирнов |
Кузнецов |
Сидоров |
Петров |
Иванов |
ПРОБЛЕМА: Как формулами извлечь уникальные значения?
РЕШЕНИЕ: Формула массива (вводится нажатием Ctrl+Shift+Enter):
Code
=ИНДЕКС(B$2:B$16;НАИБОЛЬШИЙ(ЕСЛИ(ПОИСКПОЗ(B$2:B$16;B$2:B$16;0)=СТРОКА(A$1:A$15);СТРОКА(A$1:A$15));СТРОКА(A1)))
В английской версии:
Code
=INDEX(B$2:B$16,LARGE(IF(MATCH(B$2:B$16,B$2:B$16,0)=ROW(A$1:A$15),ROW(A$1:A$15)),ROW(A1)))
КАК ЭТО РАБОТАЕТ: Функция ПОИСКПОЗ, сравнивающая два массива возвращает ИСТИНА только в том случае, если вхождение искомого значения в массив является первым.
В результате работы ПОИСКПОЗ мы получаем массив: {ИСТИНА:ИСТИНА:ИСТИНА:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ИСТИНА:ЛОЖЬ и т.д.}.
С помощью функции ЕСЛИ мы сравниваем получившийся массив с массивом {1:2:3:4:5:6:7:8 и т.д.}, полученном в результате работы функции СТРОКА
с заданным диапазоном и в случае если ПОИСКПОЗ вернул ИСТИНА получаем номер строки вхождения.
Собственно говоря задача решена. Теперь остаётся только оформить итог списком. Для этого используем функцию НАИБОЛЬШИЙ, которая создаст ряд
сначала из чисел, потом из значений ЛОЖЬ и функцию ИНДЕКС, которая вернёт нам необходимые текстовые значения из соответствующего массива. В жёлтых ячейках итог:
МИНУСЫ: Формулы массивов сильно замедляют скорость пересчёта листа.
ОБЛАСТЬ ПРИМЕНЕНИЯ: Любая версия Excel
ПРИМЕЧАНИЯ: Для устранения значения ошибки можно использовать проверку на ошибку согласно Вашей версии Excel или использовать Условное Форматирование
|