Функция AGGREGATE не игнорирует ошибки, когда она должна - PullRequest
0 голосов
/ 18 марта 2019

Мне нужна агрегатная функция для суммирования столбца в зависимости от того, что находится в следующем столбце.Я хочу только суммировать значения перед ячейками, отформатированными как даты (2-я и 4-я строки), которые соответствуют только февралю (2-я строка).

Вот как выглядит таблица:

Sum (1) |Дата (2)

40      February
29,05   19/02/2019
0,00    February
10,00   23/03/2019
10,00   February
17,65   March
0,00    February

Я нашел способ сделать это, но это формула массива, и я должен избегать ввода ее с Control - Shift - Enter комбинация клавиш.

Вот рабочая формула, которую я имею сейчас (я нашел часть этой формулы здесь: Дата в формуле Excel для SUMIF приходится на конкретный месяц )

={SUM(IFERROR(IF(MONTH(February_expenses[Date])=2;February_expenses[Sum];0);0))}

Это дает ожидаемый результат 29.05.Теперь вот что у меня есть для агрегатной функции (код 9 для «суммы», код 6 для «игнорирования ошибок»):

=AGGREGATE(9;6;February_expenses[Sum]/(MONTH(February_expenses[Date])=2))

, что также переводится как (выделение + клавиша F9):

=AGGREGATE(9;6;{#VALUE!;29,05;#VALUE!;#DIV/0!;#VALUE!;#VALUE!;#VALUE!})

Проблема в том, что эта функция возвращает "#VALUE!".Я не могу понять, почему, потому что я указал функцию игнорировать ошибки (код 6).Есть идеи, где я могу ошибаться?

1 Ответ

2 голосов
/ 18 марта 2019

Формы ссылок функции AGGREGATE не принимают массивы в качестве аргументов (если массив не является диапазоном ячеек). И формы Array не включают функцию SUM.

Если вы хотите избежать использования CSE, вы можете использовать SUMPRODUCT следующим образом:

=SUMPRODUCT(ISNUMBER(1/(MONTH(February_Expenses[Date])=2))*February_Expenses[Sum])

1/(…) преобразует возврат FALSE в ошибку, чтобы исключить месяцы, не относящиеся к февралю, в дополнение к реальным значениям ошибки.

...