Главная » Статьи » Excel » Формулы рабочего листа

Формула СУММЕСЛИМН (SUMIFS) и другие этого семейства

На своём сайте я много внимания уделял Excel функциям извлечения данных (ИНДЕКС, ВПР, ПОИСКПОЗ, ГПР). Они, безусловно, очень важны, но есть ещё один краеугольный класс формул, без которых просто никуда. Это, конечно же, формулы подсчёта и суммирования.

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

Идея формулы

Прежде, чем погружаться в детали функционирования формулы, полезно понимать, что же она делает по самой своей сути. Смотрим на рисунок.

Мы располагаем таблицей, в которой необходимо просуммировать значения из столбца Количество, но с учётом двух критериев или фильтров, если угодно. Первый критерий - столбец Магазин должен содержать значение Центр, второй критерий - столбец Товар должен содержать значение Компьютер. Оба критерия действуют одновременно или, как говорят, по "И" (а не по "ИЛИ"). То есть нас интересует, сколько компьютеров продал центральный магазин.

Для этого в ячейку G7 мы помещаем формулу СУММЕСЛИМН, в которую передаём 5 параметров:

  • D3:D15 - диапазон, содержащий числа, которые мы собираемся суммировать

  • B3:B15 - диапазон, содержащий значения для сравнения с критерием 1

  • G3 - ячейка, содержащая, собственно, критерий 1 - значение, которое нас интересует - "Центр"

  • C3:C15 - диапазон, содержащий значения для сравнения с критерием 2

  • G5 - ячейка, содержащая критерий 2 - "Компьютер"

Формула вернёт нам значение 14, так как только 2 строки таблицы удовлетворяют обоим нашим критериям, и обе они содержат число 7. А теперь давайте дадим более формальное описание данной функции.

Синтаксис

Вот синтаксис формулы суммирования:

    =СУММЕСЛИМН( sum_range; criteria_range_1; criteria_1 [; criteria_range_2; criteria_2 [ ... ] ] )

  • sum_range - первый параметр - всегда диапазон суммирования.

  • criteria_range_1 - диапазон для тестирования на соответствие критерию 1

  • criteria_1 - значение критерия 1. Значение может быть в виде:

    • ссылки на ячейку, например E3
    • выражения в виде текстовой строки, например ">10"
    • значения в виде числа или текста, например 45 или "Москва"

  • criteria_range_n и criteria_n - таких критериев, которые описываются всегда двумя параметрами, может быть до 127 штук. Принцип их организации остаётся неизменным.

Некоторые важные замечания

  • Количество параметров будет всегда нечётным, так как есть диапазон суммирования, а критерии идут парами. Это будет выглядеть как 3, 5, 7, 9 и т.д. параметров. Что будет соответствовать 1, 2, 3, 4 и т.д. критериев отбора строк для суммирования.

  • Диапазоны суммирования и диапазоны критериев должны всегда иметь одинаковый размер и одинаковую ориентацию (вертикальную или горизонтальную)

  • Диапазоны суммирования и диапазоны критериев могут не быть векторами (то есть располагаться более чем в одной строке или одном столбце), но опять же они должны соответствовать друг другу. То есть если диапазон суммирования имеет размер 10 на 3, то и все критериальные диапазоны должны быть строго 10 на 3. В целом, я не рекомендую подобную архитектуру ваших таблиц. Вы сэкономите себе массу сил, если критерии будут располагаться в отдельных столбцах. 1 столбец - 1 критерий.

СРЗНАЧЕСЛИМН и СЧЁТЕСЛИМН

Не откладывая в долгий ящик, сразу посмотрим на синтаксис формул СРЗНАЧЕСЛИМН и СЧЁТЕСЛИМН. У СРЗНАЧЕСЛИМН отличие только в том, что она не суммирует числа, а вычисляет по ним среднюю величину.

    =СРЗНАЧЕСЛИМН( avg_range; criteria_range_1; criteria_1 [; criteria_range_2; criteria_2 [ ... ] ] )

А СЧЁТЕСЛИМН считает строки, а не числа, поэтому она не имеет аналога параметров sum_range или avg_range. Таким образом её параметры описывают только критерии и количество параметров всегда должно быть чётным, в отличие от её коллег.

    =СЧЁТЕСЛИМН( criteria_range_1; criteria_1 [; criteria_range_2; criteria_2 [ ... ] ] )


Файл примера

Скачать


Критерии

Теперь, когда мы получили некоторое представление по механизму работы СУММЕСЛИМН, мы можем погрузиться в более сложные примеры, раскрывающие мощь и полезность этой формулы. В качестве полигона будем использовать вот такую умную таблицу с именем Sales:

СУММЕСЛИМН и умные таблицы

Посмотрите на пример 1 нашего учебного файла, формула в L6. Обратите внимание, как удобно использовать структурные ссылки умных таблиц в формулах вообще и в СУММЕСЛИМН в частности.

L4 и L5 содержат значения критериев.

Критерий для периода дат

А вот как задать период дат (с... по ...) при суммировании:

Обратите внимание на очень важную конструкцию:

    ">=" & $O$5

Это не что иное, как выражение в виде текстовой строки. Причём это не статическое выражение, которое обычно приводят в справке по СУММЕСЛИМН, типа ">= 200000". Это выражение динамическое, то есть - гораздо более ценное и интересное. Всё что вам нужно - это вставить между знаком операции ">=" и ссылкой на ячейку с параметром - знак операции сложения строк "&".

Динамическая операция сравнения

А почему бы не дать на откуп пользователю право определять операцию для критерия? В предыдущем примере пользователь мог выбирать порог N в критерии ">=N". А в этом примере пользователь определяет и порог и саму операцию! А почему нет?

В L12 у нас находится выпадающий список, ссылающийся на 4 возможные операции: >, >=, <, <=.

Символы подстановки

При формировании критериев можно использовать символы подстановки: "?" - заменяет любой символ, "*" - заменяет любое количество символов (в том числе и его отсутствие). Например критерий "*т*" сработает и на слово "Центр", и на слово "Восток". А, если бы существовала такая альтернатива, то сработал бы и на слово "опт" (это, как раз случай, когда вторая звёздочка в "*т*" заменила ноль символов справа от "т").

Ответы на сложные вопросы

При помщи *ЕСЛИМН формул можно отвечать на довольно заковыристые вопросы. Например, какая доля холодильников в Центре была продана по ценам, превышающим средние цены холодильников по всем магазинам? А вот формула, которое это расчитывает:

Как видите мы использовали 2 формулы СУММЕСЛИМН и 1 СРЗНАЧЕСЛИМН. СРЗНАЧЕСЛИМН вернула нам средние цены по холодильникам. Первая СУММЕСЛИМН вернула количество проданных телевизоров с ценами выше средних, а вторая формула вернула общее количество холодильников, проданных в Центре. Найдя частное между результатами двух СУММЕСЛИМН, мы получили долю от единицы и просто выразили её в процентах.

Набор магазинов

А что делать, если нам нужны продажи двух магазинов? В рамках одной формулы это решить в общем случае нельзя (метод через символы подстановки не универсален, так как магазины могут иметь полностью уникальные имена). Ответ очевиден - надо использовать 2 формулы и просто сложить их результаты. Хотя понятно, что такой метод подойдёт далеко не во всех ситуациях.

Но есть и ограничения...

Надеюсь вы убедились, что *ЕСЛИМН достаточно гибки, но есть один узкий момент, который надо хорошо понимать. Например, я хочу знать, сколько раз я торговал в Центре, предоставляя покупателям скидку более или равную 5%? Как я могу это узнать? Только вычисляя по каждой строке отношение предоставленной скидки к базовой цене. Понимаете - по каждой строке надо делать вычисление и сравнивать с 5%! Вот такое формулы *ЕСЛИМН сами, без вашей помощи сделать не смогут, так как формула один раз вычисляет критерий, а потом сравнивает его со всеми строками критериального диапазона, а нам надо это делать динамически. Но никто нам не мешает организовать дополнительный столбец, который будет предварительно считать отношение скидки к базовой цене, а после этого можно уже остальную работу поручить формуле СЧЁТЕСЛИМН (см. пример 7).

Пустые ячейки

Если вы хотите, чтобы формула *ЕСЛИМН отреагировала на пустые ячейки, то следует использовать критерии "" (пустая строка) или "=". Например, посмотрите лист Blank нашего учебного файла:

    =СУММЕСЛИМН( E3:E10; B3:B10; "=" )

однако, если пустота ячейки является следствием работы формулы (например, формулы ЕСЛИ), то такая ячейка отреагирует только на критерий "", то есть:

    =СУММЕСЛИМН( E3:E10; B3:B10; "" )


Не пустые ячейки

А вот, если критерием является то, что ячейка хоть что-то содержит, то можно использовать такую форму:

    =СУММЕСЛИМН( E3:E10; B3:B10; "<>" )


Ну что ж, я надеюсь, что вы почувствовали всю силу, сосредоточенную в формулах этого семейства. Удачи!


Читайте также:

Категория: Формулы рабочего листа | Добавил: dsb75 (05.05.2015) | Автор: Батьянов Денис E W
Просмотров: 30940 | Теги: СУММЕСЛИМН, SUMIFS, СЧЁТЕСЛИМН, СРЗНАЧЕСЛИМН, COUNTIFS, AVERAGEIFS | Рейтинг: 5.0/5
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс.Метрика