Трюк №69. Как в Excel 2010 просуммировать каждую вторую, третью или n-ую строку или ячейку

Часто бывает, что нужно суммировать каждую вторую, третью, четвертую и т. д. ячейку в электронной таблице. Теперь, благодаря следующему трюку, это можно сделать.

В Excel не предусмотрено стандартной функции, которая может суммировать каждую n-ю ячейку или строку. Однако можно выполнить эту задачу несколькими различными способами. Все эти подходы основаны на функциях СТРОКА (ROW) и ОСТАТ (MOD).

Функция СТРОКА (ROW) возвращает номер строки для заданной ссылки на ячейку: ROW(reference), в русской версии Excel СТРОКА(ссылка).
Функция ОСТАТ (MOD) возвращает остаток от деления числа на делитель: MOD(number;divisor), в русской версии Excel ОСТАТ(число;делитель).

Поместите функцию СТРОКА (ROW) в функцию ОСТАТ (MOD) (чтобы передать числовой аргумент), разделите на 2 (чтобы суммировать каждую вторую ячейку) и проверьте, не равен ли результат нулю. Если это так, ячейка суммируется. Эти функции можно использовать разнообразнейшими способами — некоторые обеспечат лучший результат, чем другие. Например, формула массива для суммирования каждой второй ячейки в диапазоне $А$1:$А$100 могла бы выглядеть так: =SUM(IF(MOD(ROW($A$1:$А$500);2)=0;$А$1:$А$500;0)), в русской версии Excel =СУММ(ЕСЛИ(ОСТАТ(СТРОКА($А$1:$А$500);2)=0;$А$1:$А$500;0)).
[stextbox id=»warning»]Поскольку это формула массива, необходимо ввести ее, нажав сочетание клавиш Ctrl+Shift+Enter, Excel добавит фигурные скобки, чтобы она выглядела так: {=SUM(IF(MOD(ROW($A$1:$A$500),2)=0;$A$1:$A$500;0))}, в русской версии Excel: {=СУММ(ЕСЛИ(ОСТАТ(СТРОКА($А$1:$А$500);2)=0;$А$1:$А$500;0))} Нужно, чтобы Excel сам добавил фигурные скобки; если вы добавите их самостоятельно, формула не будет работать.[/stextbox]
Хотя цель достигнута, такой способ отрицательно влияет на дизайн электронной таблицы. Это ненужное применение формулы массива. Чтобы еще ухудшить дела, в эту длинную формулу вложена пересчитываемая функция СТРОКА (ROW), превращающая большую формулу также в пересчитываемую. Это означает, что она будет постоянно пересчитываться, что бы вы ни сделали в рабочей книге. Это очень плохой способ!

Вот другая формула, представляющая собой чуть лучший выбор: =SUMPRODUCT((MOD(ROW($A$1:$A$500);2)=0)*($A$1:$A$500)), в русской версии Excel =СУММПРОИЗВ((ОСТАТ(СТРОКА($А$1:$А$500);2)=0)*($А$1:$А$500)).

Нужно, однако, помнить, что эта формула вернет ошибку #ЗНАЧ! (#VALUE!), если какие-либо ячейки диапазона содержат не числа, а текст. Эта формула, хотя и не является фактически формулой массива, также замедляет работу Excel, если использовать ее слишком много раз или если каждый раз она ссылается на большой диапазон.

К счастью, есть лучший способ, представляющий собой не только более эффективное, но и намного более гибкое решение. Он требует применения функции БДСУММ (DSUM). В этом примере мы использовали диапазон А1:А500 как диапазон, в котором необходимо суммировать каждую n-ю ячейку.

В ячейку Е1 введите слово Criteria. В ячейку Е2 введите следующую формулу: =MOD(ROW(A2)-$C$2-1;$C$2)=0, в русской версии Excel =ОСТАТ(СТРОКА(А2)-$С$2-1;$С$2)=0. Выделите ячейку С2 и выберите команду Данные → Проверка (Data → Validation).

В поле Тип данных (Allow) выберите пункт Список (List), а в поле Источник (Source) введите 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Удостоверьтесь, что установлен флажок Список допустимых значений (In-Cell), и щелкните на кнопке ОК. В ячейке С1 введите текст SUM every…. В любой ячейке, кроме строки 1, введите следующую формулу: =DSUM($A:$A;1;$E$1:$E$2), в русской версии Excel =БДСУММ($А:$А;1;$Е$1:$Е$2).

В ячейке непосредственно над той, где вы ввели функцию БДСУММ (DSUM), введите текст ="Summing Every" & $С$2 & CHOOSE($C$2;"st";"nd";"rd";"th";"th";"th";"th";"th";"th";"th") & "Cell". Теперь осталось только выбрать нужное число в ячейке С2, а остальное сделает функция БДСУММ (DSUM).

При помощи функции БДСУММ (DSUM) можно суммировать ячейки через указанный вами интервал. Функция БДСУММ (DSUM) намного эффективнее, чем формула массива или функция СУММПРОИЗВ (SUMPRODUCT). Хотя настройка занимает немного больше времени, это тот случай, когда тяжело в ученье, легко в бою.

Top