В Excel хотите суммировать только определенные значения (не так просто, как SUMIF)? - PullRequest
2 голосов
/ 23 февраля 2011

Итак, у меня есть две колонки в именованной программе и одна со значениями стоимости. Этими тремя программами являются ABC, A, B и C. Я хочу суммировать затраты по всем программам, которые содержат A. Все, которые содержат B. И все, которые содержат C. ABC явно включены во все суммы. Проблема в том, что для того, чтобы получить только эти программы, в таблице есть фильтр, который суммирует. Может кто-нибудь помочь? Вот пример того, что я имею в виду:

program     cost
A           5.00
B           4.00
ABC         9.00
A           2.00

поэтому я бы хотел в трех отдельных ячейках "сумма с А" = 16,00, "сумма с В" = 13,00, "сумма с С" = 9,00.

1 Ответ

2 голосов
/ 23 февраля 2011
Item | Total
A    | 16
B    | 13
C    | 9

Предполагая, что указанный выше диапазон находится в A1: B5, моей первой формулой является следующая формула массива:

{=SUM(IF(ISERROR(FIND(B6,$A$1:$A$5)),0,$B$1:$B$5))}

Формула массива создается путем ввода формулы и удерживания Ctrl+Shiftклавиши, пока вы нажмете Enter.В моем решении я создал область, в которой я вычисляю по итоговым значениям и у меня есть столбец (в данном случае называется Item), в котором указывается буква, которую я вижу в исходном столбце A.

Если вы пытались ввестипри использовании VBA вы бы использовали свойство FormulaArray:

Selection.FormulaArray ="SUM(IF(ISERROR(FIND(B6,$A$1:$A$5)),0,$B$1:$B$5))"

Обновление

Ограничить вычисление только видимыми ячейками немного сложнее.Предположим, у нас есть ваши исходные данные в ячейках A1: B5.Давайте также предположим, что наши тестовые значения начинаются в ячейке C7 (диагональ к исходным данным).Наша формула итогов будет выглядеть следующим образом:

=SUMPRODUCT(SUBTOTAL(3,OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1)), --NOT(ISERROR(FIND(C7,$A$1:$A$5))), $B$1:$B$5)

Следующая часть возвращает диапазон по ячейкам

OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1)

Эта часть возвращает 1 для каждой видимой ячейки и 0 для невидимой ячейки

SUBTOTAL(3,OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1))

Эта часть является нашим критерием.NOT(ISERROR(... вернет TRUE или FALSE.Двойной отрицательный знак -- преобразует это значение в отрицательное целое число, а затем удаляет это отрицание.

--NOT(ISERROR(FIND(C7,$A$1:$A$5)))

Наконец, функция SUMPRODUCT умножает совпадающие массивы друг на друга и вычисляет сумму.Первые два массива возвращают серию 0 или 1.Если строка является видимой и соответствует нашим критериям, то мы получаем 1 * 1, умноженное на указанное значение в ячейке.Если данная ячейка не видна или не соответствует критериям, одна из двух возвращает ноль и обнуляет весь элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...