Формулы массива с каждым днем нравятся мне всё больше и больше! ? Недавно у меня возникла задача — найти адрес ячейки , содержащей максимальное значение в диапазоне. Для начала я создал тестовый диапазон А1:F10 (рис. 1), заполнив его случайными целыми числами от 1 до 100 с помощью функции =СЛУЧМЕЖДУ(1;100).
Рис. 1. Исходный диапазон
Скачать заметку в формате Word, примеры в формате Excel
Примечания. Если рисунки выглядят мелко, загрузите их на свой ПК. Мне не удалось «укротить» кавычки внутри формул, они все время изображались как «лапочки», поэтому пришлось использовать рисунки. Текст формул можно получить в файле Word или Excel.
Чтобы было легче визуально следить за максимальным и минимальным значениями в диапазоне, я задал условное форматирование (рис. 2).
Рис. 2. Условное форматирование по всем ячейкам диапазона позволяет выделять цветом ячейки, содержащие максимальное и минимальное значения
Напомню, что функция =СЛУЧМЕЖДУ() обновляется всякий раз, когда в Excel выполняется какая-либо операция с числами (но не форматирование). Можно просто жать F9 (эквивалентно команде «пересчитать»).
Кто не знаком с формулами массива, рекомендую начать с прочтения заметки Введение в формулы массива.
Аналог формулы для вычисления адреса ячейки с максимальным значением в диапазоне я нашел в книге Уокенбаха «Формулы в MS Excel 2010»:
Эта формула массива возвращает номер строки, в которой находится максимальное значение одномерного вертикального диапазона «массив»:
Для того, чтобы воспользоваться формулой Уокенбаха, надо присвоить имя нашему диапазону А1:F10. Я создал динамический массив под именем массив (рис. 3). Для упрощения можно создать статический массив, набрав вместо формулы, выделенной на рис. 3, следующее: =Лист1!$A$1:$F$10. Преимущество динамического массива на основе функции СМЕЩ проявятся позже, если вам понадобится расширить рамки вашего диапазона. Например, добавить строки и/или столбцы. Если при этом вы создали статический диапазон, вам понадобится руками изменить область определения массива под именем массив. Если же у вас был создан динамический массив, никаких изменений вносить не потребуется! Кто не знаком с работой функции СМЕЩ, рекомендую почитать Автоматическое обновление сводной таблицы.
Рис. 3. Присвоение имени двумерному диапазону
Рассмотрим как работает формула Уокенбаха:
Функция ЕСЛИ создает виртуальный массив, соответствующий диапазону массив. Если ячейка содержит максимальное значение, то соответствующий элемент в виртуальном массиве равен номеру строки этой ячейки, в противном случае элемент массива равен пустой строке. Функция МИН использует виртуальный массив в качестве своего аргумента и возвращает минимальный номер строки, где содержится максимальное значение диапазона массив. Если в диапазоне массив имеется несколько ячеек с максимальными значениями, то возвращается номер первой строки, где содержится это значение.
К сожалению, формула Уокенбаха предназначена для одномерного вертикального диапазона, поэтому она всегда возвращает адрес ячейки из столбца А, например, $A$8, когда правильное значение было бы $D$8.
Чтобы приспособить формулу Уокенбаха для вычисления адреса ячейки с максимальным значением в двумерном диапазоне, создадим еще один динамический массив — столбМакс (рис. 4)
Рис. 4. Присвоение имени одномерному вертикальному диапазону, содержащему один столбец, в который входит ячейка с максимальным значением
Рассмотрим подробнее, как функция СМЕЩ формирует этот одномерный вертикальный диапазон (рис. 5). Кстати, здесь, в отличие от выше описанного случая, не обойтись без динамического массива, так как заранее номер столбца, содержащего ячейку с максимальным значением, не известен…
Рис. 5. Функция СМЕЩ, динамически формирующая одномерный вертикальный диапазон
Функция ЕСЛИ(массив=МАКС(массив);СТОЛБЕЦ(массив);””) создает виртуальный массив, соответствующий диапазону массив. Если ячейка содержит максимальное значение, то соответствующий элемент в виртуальном массиве равен номеру столбца этой ячейки, в противном случае элемент массива равен пустой строке.
Функция МИН(ЕСЛИ(массив=МАКС(массив);СТОЛБЕЦ(массив);””)) использует виртуальный массив в качестве своего аргумента и возвращает минимальный номер столбца, где содержится максимальное значение диапазона массив. Если в диапазоне массив имеется несколько ячеек с максимальными значениями, то возвращается номер самого левого столбца, где содержится это максимальное значение.
Итоговая формула для нахождения адреса ячейки с максимальным значением в двумерном диапазоне имеет следующий вид (рис. 6):
Рис. 6. Формула для нахождения адреса ячейки с максимальным значением в двумерном диапазоне
Подробно изучить, как работает формула можно с помощью сервиса Excel — пошаговое вычисление формулы (рис. 7).
Рис. 7. Пошаговое вычисление формулы
Аналогично создается и формула для нахождения адреса ячейки с минимальным значением в двумерном диапазоне: