Поиск минимального или максимального значения по условию
В Microsoft Excel давно есть в стандартном наборе функции СЧЁТЕСЛИ (COUNTIF), СУММЕСЛИ (SUMIF) и СРЗНАЧЕСЛИ (AVERAGEIF) и их аналоги, позволяющие искать количество, сумму и среднее в таблице по одному или нескольким условиям. Но что если нужно найти не сумму или среднее, а минимум или максимум по условию(ям)?
Предположим, нам нужно найти минимальную цену для каждого товара в базе данных по поставщикам:
Таким образом, условием будет наименование товара (бумага, карандаши, ручки), а диапазоном для выборки - столбец с ценами.
Для будущего удобства, конвертируем исходный диапазон с ценами в "умную таблицу". Для этого выделите его и выберите на вкладке Главная - Форматировать как таблицу (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(IF(Table1[Товар]=F4;Table1[Цена]))
Не забудьте после ввода этой формулы в первую зеленую ячейку G4 нажать не Enter, а Ctrl+Shift+Enter, чтобы ввести ее как формулу массива. Затем формулу можно скопировать на остальные товары в ячейки G5:G6.
Давайте разберем логику работы этой формулы поподробнее. Функция ЕСЛИ проверяет каждую ячейку массива из столбца Товар на предмет равенства текущему товару (Бумага). Если это так, то выдается соответствующее ему значение из столбца Цена. В противном случае – логическое значение ЛОЖЬ (FALSE).
Таким образом внешняя функция МИН (MIN) выбирает минимальное не из всех значений цен, а только из тех, где товар был Бумага, т.к. ЛОЖЬ функцией МИН игнорируется. При желании, можно выделить мышью всю функцию ЕСЛИ(…) в строке формул
... и нажать на клавиатуре F9, чтобы наглядно увидеть тот самый результирующий массив, из которого потом функция МИН и выбирает минимальное значение:
Способ 3. Функция баз данных ДМИН
Этот вариант использует малоизвестную (и многими, к сожалению, недооцененную) функцию ДМИН (DMIN) из категории Работа с базой данных (Database) и требует небольшого изменения результирующей таблицы:
Как видите, зеленые ячейки с результатами транспонированы из столбца в строку и над ними добавлена мини-таблица (F4:H5) с условиями. Логика работы этой функции следующая:
- База_данных - вся наша таблица вместе с заголовками.
- Поле - название столбца из шапки таблицы, из которого выбирается минимальное значение.
- Критерий - таблица с условиями отбора, состоящая (минимально) из двух ячеек: названия столбца, по которому идет проверка (Товар) и критерия (Бумага, Карандаши, Ручки).
Это обычная формула (не формула массива), т.е. можно вводить и использовать ее привычным образом. Кроме того, в той же категории можно найти функции БДСУММ (DSUM), ДМАКС (DMAX), БСЧЁТ (DCOUNT), которые используются совершенно аналогично, но умеют находить не только минимум, но и сумму, максимум и количество значений по условию.
Способ 4. Сводная таблица
Если в исходной таблице очень много строк, но данные меняются не часто, то удобнее будет использовать сводную таблицу, т.к. формула массива и функция ДМИН могут сильно тормозить Excel.
Установите активную ячейку в любое место нашей умной таблицы и выберите на вкладке Вставка - Сводная таблица (Insert - Pivot Table). В появившемся окне нажмите ОК:
В конструкторе сводной таблицы перетащите поле Товар в область строк, а Цену в область значений. Чтобы заставить сводную вычислять не сумму (или количество), а минимум щелкните правой кнопкой мыши по любому числу и выберите в контекстном меню команду Итоги по - Минимум:
Вытаскивать данные из сводной в дальнейшие расчеты теперь можно с помощью функции ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ (GET.PIVOT.DATA), которую мы подробно разбирали ранее:
Ссылки по теме
- Зачем нужна функция ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ
- Выборочное вычисление суммы, среднего и т.д. по одному или нескольким критериям
- Что такое "умные таблицы" в Excel и как с ними работать
Тоже очень удобно. Можно вытаскивать 2-е, 3-е наименьшее
Отличное решение.
Виктор, это просто офигенно, и, главное - насколько все изящно и компактно!
Подскажите, пожалуйста, есть ли такая возможность, решить простенькую задачку.
Исходные данные:
Столбик с данными. (Одномерный массив)
Ищу в нем Сумму ТОП-10 с макс. значением (воспользовался функцией из PLEX "сумма ТОП-5", модернизировав ее).
То, что найдены топ-10 значений и просуммированы, это хорошо...
Вопрос, а как их (эти ТОП-10) теперь додсветить каким-либо цветом?
Может быть использовать формулы условного форматирования, или есть какой-то другой вариант (способ)?
С уважением,
Андрей Кузнецов
{=МИН(
ЕСЛИ(Таблица1[Товар]=F20;
ЕСЛИ(Таблица1[Поставщик]="Писарь и Ко";
Таблица1[Цена]
)))}
К сожалению на установленном Excel 2016 не нашел функций МИНЕСЛИ и МАКСЕСЛИ.
Всем доброго дня.
К сожалению на установленном Excel 2016 не нашел функций МИНЕСЛИ и МАКСЕСЛИ.
Способ 1. Функции МИНЕСЛИ и МАКСЕСЛИ в Excel 2019
А вот и сама ссылка
Супер формула.
а как можно еще выдернуть названия поставщика у которого мин цена
на эксель 2007?
Спасибо!
В массиве Excel2007 три столбца чисел. Количество строк исчисляется десятками тысяч. Как правильно нарисовать формулу для массива, чтобы в четвёртом столбце получить максимум из чисел в каждой строке?
Есть РЯД ПАРАМЕТРОВ 11, 25, -3, 0, 165, 300, -20, Как excel 2010 находить MAX и MIN, НО ! только среди чисел >5?
Пробовал через если, но не получается. если не трудно подскажите пожалуйста.
Николай, скажите, пожалуйста, как можно решить подобную задачу, но, в которой требуется вытащить минимальное число во весь столбец по заданному условию? Через минесли, наимен не получается
Столбец 2 - цена
Столбец 1 - дата
B1 и D1 - диапазон дат "с" - "по"
Сделал вот так: =МАКСЕСЛИ(Таблица4[Столбец2];Таблица4[Столбец1];"B1<";Таблица4[Столбец1];"D1>";)
столбец "А" - даты
столбец "В" - значения
$В$1 и $D$7 - диапазон дат
=МАКС(ЕСЛИ((A5:A17<=$D$1)*(A5:A17>=$B$1);B5:B17))
а PQ как реализовать?
Нужно в категории найти первую цену.
=СМЕЩ($A$1;1;0;СЧЁТ($A:$A);4) == база данных курсов валют (дата; USD; EUR; GBR) <Ctrl+F3> задать динамическое имя (_RateCBR) диапазону a1:d180 и использовать её в формулах ВПР и др.
=СМЕЩ($A$1;ПОИСКПОЗ(МАКС(A:A)-1;A:A;1)-1;0) -- дата в базе данных в курсов валют == максимальное значение в таблице.
наверняка подобные методы, но более изящные Вы сможете предложить.
Коллеги! У меня затык((( Помогите!!!
Дано столбец с цифровыми значениями, Значения представлены как интервалами чисел (1,2,3,4 и т.д) так и единичными значениями например 15. То есть числовой ряд выглядит так: 1,2,3,4,5,6,15,20,21,22,23,24.
Как вывести в отдельную ячейку начало и конец интервала: 1 - 6; 15; 20 - 24.
То есть столбцы: список / цех / показатели. В итоговом столбце нужно раздать всем отличившимся медальки/места/грамоты/премии.
С помощью формулы Наибольший в матрице удалось проранжировать только по одному типу в фильтре, указанному в формуле. Как сделать универсальную и простую формулу, не множа условия по каждому виду, не могу решить
upd. Сам нашел. Все, оказывается, нормально сработало в виде:
=ЕСЛИ(H12=НАИБОЛЬШИЙ((цех=фильтр)*показатели;1);премия1;ЕСЛИ(H12=НАИБОЛЬШИЙ((цех=фильтр)*показатели;2);премия2;ЕСЛИ(H12=НАИБОЛЬШИЙ((цех=фильтр)*показатели;3);премия3))