Поиск минимального или максимального значения по условию

В Microsoft Excel давно есть в стандартном наборе функции СЧЁТЕСЛИ (COUNTIF), СУММЕСЛИ (SUMIF) и СРЗНАЧЕСЛИ (AVERAGEIF) и их аналоги, позволяющие искать количество, сумму и среднее в таблице по одному или нескольким условиям. Но что если нужно найти не сумму или среднее, а минимум или максимум по условию(ям)? 

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

min-if1.png

Таким образом, условием будет наименование товара (бумага, карандаши, ручки), а диапазоном для выборки - столбец с ценами.

Для будущего удобства, конвертируем исходный диапазон с ценами в "умную таблицу". Для этого выделите его и выберите на вкладке Главная - Форматировать как таблицу (Home - Format as Table) или нажмите Ctrl+T. Наша "поумневшая" таблица автоматически получит имя Таблица1, а к столбцам можно будет, соответственно, обращаться по их именам, используя выражения типа Таблица1[Товар] или Таблица1[Цена]. При желании, стандартное имя Таблица1 можно подкорректировать на вкладке Конструктор (Design), которая появляется, если щелкнуть в любую ячейку нашей "умной" таблицы. Подробнее о таких таблицах и их скрытых возможностях можно почитать здесь.

Способ 1. Функции МИНЕСЛИ и МАКСЕСЛИ в Excel 2016

Начиная с версии Excel 2016 в наборе функции Microsoft Excel наконец появились функции, которые легко решают нашу задачу - это функции МИНЕСЛИ (MINIFS) и МАКСЕСЛИ (MAXIFS). Синтаксис этих функции очень похож на СУММЕСЛИМН (SUMIFS):

=МИНЕСЛИ(Диапазон_чисел; Диапазон_проверки1; Условие1; Диапазон_проверки2; Условие2 ... )

где

  • Диапазон_чисел - диапазон с числами, из которых выбирается минимальное или максимальное
  • Диапазон_проверки - диапазон, который проверяется на выполнение условия
  • Условие - критерий отбора
Например, в нашем случае:

Поиск минимального по условию функцией МИНЕСЛИ

Просто, красиво, изящно. Одна проблема - функции МИНЕСЛИ и МАКСЕСЛИ появились только начиная с 2016 версии Excel. Если у вас (или тех, кто будет потом работать с вашим файлом) более старые версии, то придется шаманить другими способами.

Способ 2. Формула массива

min-if2.png

В английской версии это будет, соответственно =MIN(IF(Table1[Товар]=F4;Table1[Цена]))

Не забудьте после ввода этой формулы в первую зеленую ячейку G4 нажать не Enter, а Ctrl+Shift+Enter, чтобы ввести ее как формулу массива. Затем формулу можно скопировать на остальные товары в ячейки G5:G6.

Давайте разберем логику работы этой формулы поподробнее. Функция ЕСЛИ проверяет каждую ячейку массива из столбца Товар на предмет равенства текущему товару (Бумага). Если это так, то выдается соответствующее ему значение из столбца Цена. В противном случае – логическое значение ЛОЖЬ (FALSE).

Таким образом внешняя функция МИН (MIN) выбирает минимальное не из всех значений цен, а только из тех, где товар был Бумага, т.к. ЛОЖЬ функцией МИН игнорируется. При желании, можно выделить мышью всю функцию ЕСЛИ(…) в строке формул

min-if3.png

... и нажать на клавиатуре F9, чтобы наглядно увидеть тот самый результирующий массив, из которого потом функция МИН и выбирает минимальное значение:

min-if4.png

Способ 3. Функция баз данных ДМИН

Этот вариант использует малоизвестную (и многими, к сожалению, недооцененную) функцию ДМИН (DMIN) из категории Работа с базой данных (Database) и требует небольшого изменения результирующей таблицы:

min-if5.png

Как видите, зеленые ячейки с результатами транспонированы из столбца в строку и над ними добавлена мини-таблица (F4:H5) с условиями. Логика работы этой функции следующая:

min-if6.png

  • База_данных - вся наша таблица вместе с заголовками.
  • Поле - название столбца из шапки таблицы, из которого выбирается минимальное значение.
  • Критерий - таблица с условиями отбора, состоящая (минимально) из двух ячеек: названия столбца, по которому идет проверка (Товар) и критерия (Бумага, Карандаши, Ручки).

Это обычная формула (не формула массива), т.е. можно вводить и использовать ее привычным образом. Кроме того, в той же категории можно найти функции БДСУММ (DSUM), ДМАКС (DMAX), БСЧЁТ (DCOUNT), которые используются совершенно аналогично, но умеют находить не только минимум, но и сумму, максимум и количество значений по условию.

Способ 4. Сводная таблица

Если в исходной таблице очень много строк, но данные меняются не часто, то удобнее будет использовать сводную таблицу, т.к. формула массива и функция ДМИН могут сильно тормозить Excel.

Установите активную ячейку в любое место нашей умной таблицы и выберите на вкладке Вставка - Сводная таблица (Insert - Pivot Table). В появившемся окне нажмите ОК:

min-if7.png

В конструкторе сводной таблицы перетащите поле Товар в область строк, а Цену в область значений. Чтобы заставить сводную вычислять не сумму (или количество), а минимум щелкните правой кнопкой мыши по любому числу и выберите в контекстном меню команду Итоги по - Минимум:

min-if8.png

Вытаскивать данные из сводной в дальнейшие расчеты теперь можно с помощью функции ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ (GET.PIVOT.DATA), которую мы подробно разбирали ранее:

min-if9.png

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




08.04.2016 22:41:20
=АГРЕГАТ(15;6;Таблица1[Цена]/(Таблица1[Товар]=F4);1)  
Тоже очень удобно. Можно вытаскивать 2-е, 3-е наименьшее
19.04.2017 08:55:12
Оригинально!
22.08.2018 10:09:18
Очень сильно.
Отличное решение.
02.04.2019 11:02:51
нереально круто! спасибо
20.12.2016 12:57:15
Здравствуйте, Николай, и все кто может помочь!
Подскажите, пожалуйста, есть ли такая возможность, решить простенькую задачку.
Исходные данные:
Столбик с данными. (Одномерный массив)
Ищу в нем Сумму ТОП-10 с макс. значением (воспользовался функцией из PLEX "сумма ТОП-5", модернизировав ее).
То, что найдены топ-10 значений и просуммированы, это хорошо...
Вопрос, а как их (эти ТОП-10) теперь додсветить каким-либо цветом?
Может быть использовать формулы условного форматирования, или есть какой-то другой вариант (способ)?
С уважением,
Андрей Кузнецов
27.02.2017 13:30:51
Коллеги, не подскажете, как быть, если нужно найти из столбца данных минимальное значение, но за исключением, например, 0 или отрицательных чисел... Спасибо!
24.03.2017 14:15:02
А как можно суммировать например первые 2 или 3 максимальных(минимальных) значения?
24.03.2017 15:19:27
=СУММ(НАИБОЛЬШИЙ(C2:C16;{1;2;3}))
31.03.2017 11:44:46
Подскажите плиз, а как посчитать наименьшую/наибольшую цену не только по одному параметру - "Товар" но и "Поставщик". Другими словами, если у Поставщика несколько видов Бумаги, то что бы находило самую дешевую/дорогую бумагу по каждому Поставщику.
19.04.2017 08:57:39
Можно через формулу массива задать несколько условий, например:

{=МИН(
 ЕСЛИ(Таблица1[Товар]=F20;
 ЕСЛИ(Таблица1[Поставщик]="Писарь и Ко";
 Таблица1[Цена]
)))}
08.06.2017 12:52:41
Всем доброго дня.
К сожалению на установленном Excel 2016 не нашел функций МИНЕСЛИ и МАКСЕСЛИ.
08.06.2017 13:58:18
Когда ориентация не вертикальная и необходимо сравнить один и тот же товар у множества постовщиков по критерию цена, написал такую формулу -{=ЕСЛИОШИБКА(НАИМЕНЬШИЙ(ЕСЛИ(CO2:FF2=DL7;CO3:FF3;"");1);"")} Николай, если не сложно то прокомментируйте пожалуйста, возможно есть куда более легкий вариант.
16.03.2018 10:56:08
Александр 08.06.2017 12:52:41
Всем доброго дня.
К сожалению на установленном Excel 2016 не нашел функций МИНЕСЛИ и МАКСЕСЛИ.
Также после установки не нашел данной функции. На сайте майкрософт написано: "Примечание: Эта функция доступна только при наличии подписки на Office 365. Если у вас есть подписка на Office 365, убедитесь, что у вас установлена последняя версия Office. " Даже  не знаю что и делать. Формула массива сильно грузит файл, ДМИН работает с условием представленным в виде столбца, а структура сводной таблицы не позволяет корректно отобразить требуемые данные. Буду рад если кто-нибудь что-нибудь подскажет.
12.12.2018 17:47:59
Подскажите, пожалуйста, как воспользоваться формулой массива, что бы она не учитывала пустые ячейки?
24.03.2019 06:07:29
Скажите пожалуйста а как найти максимальное значение даты по нескольким условиям в гугл таблице или в экселе же?
Наверх