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

Я пытаюсь вернуть сумму диапазона ячеек, если связанное значение находится в диапазоне значений, используемых в качестве условий фильтрации. Например, используя следующую таблицу данных:

  Keys      Values
   A        500
   B        300
   C        600
   D         20
   A        150
   C        600

и следующий список ключей для суммирования:

Sum Keys:
   A
   D

Я ищу шаблонный способ вернуть 500+20+150 = 670.

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

В моей голове формула выглядела бы примерно так:

=SUMIFS(Values, Keys, OR(Sum Keys), ...(optional other conditions))

Я понимаю, что это простая проблема VBA, но я пытаюсь избежать этого, потому что электронную таблицу будут проверять люди с разным знанием VBA (или без него). Кроме того, добавление столбца индикатора к данным, чтобы показать, находится ли ключ в диапазоне Sum Keys, нереалистично, потому что будет несколько вкладок, обобщающих данные, каждая со своими фильтрами по Key.

Любая помощь приветствуется, хотя я понимаю, что это может быть невозможно без VBA. Пожалуйста, дайте мне знать, если потребуется дополнительная информация.

Спасибо!

РЕДАКТИРОВАТЬ: Спасибо Барри Гудини за ответ! См. комментарии к его сообщению для общего решения для суммирования на основе нескольких диапазонов приемлемых критериев.


person Andy Phillips    schedule 08.11.2013    source источник


Ответы (2)


Вы можете использовать такую ​​формулу

=SUMPRODUCT(SUMIFS(Values,Key,Sum_Keys))

Если Sum_Keys имеет 4 значения, то формула SUMIFS возвращает «массив» из 4 значений (по одному для каждого ключа в Sum_Keys), поэтому вам нужна другая функция для суммирования этого массива. Я использую СУММПРОИЗВ, потому что это позволяет избежать «ввода массива».

Вы можете добавить дополнительные условия обычным способом, например.

=SUMPRODUCT(SUMIFS(Values,Key,Sum_Keys,Dates,Specifc_date))

person barry houdini    schedule 08.11.2013
comment
Любопытный вопрос - вы можете сделать это для нескольких полей? Например, =SUMPRODUCT(SUMIFS(Values, Key, Sum_Keys, Dates, Sum_Dates))? Это работает, если Sum_Dates является только одним значением, но если это диапазон, он возвращает только первое совпадение. - person Andy Phillips; 08.11.2013
comment
Это сложнее ... один из Sum_Keys и Sum_Dates должен быть столбцом значений, а другой должен быть строкой значений, тогда это работает - если они оба столбца (или обе строки), вы можете ТРАНСПОНИРОВАТЬ один в формуле - =СУММ( СУММЕСЛИМН(Значения, Ключ, Сумма_Ключей, Даты, ТРАНСП(Сумма_Даты0)) - для этого требуется CTRL+SHIFT+ВВОД - person barry houdini; 08.11.2013
comment
... также вы достигли предела с двумя множественными критериями - сделать неограниченное (почти) переключение на синтаксис SUMPRODUCT, например =SUMPRODUCT(ISNUMBER(MATCH(Key,Sum_Keys,0))*ISNUMBER(MATCH(Dates, Sum_Dates,0)),Values) .... хотя это будет медленнее, чем СУММЕСЛИМН, особенно с целыми столбцами - person barry houdini; 08.11.2013
comment
Ты гений. Спасибо большое! - person Andy Phillips; 08.11.2013

Если вы хотите суммировать элементы в соответствии с условиями фильтра, рассмотрите возможность использования

=ПРОМЕЖУТОЧНЫЙ ИТОГ()

функция рабочего листа. Это инструмент для решения этой задачи.

person Gary's Student    schedule 08.11.2013
comment
Извините, если я неясно выразился: я не могу фильтровать данные напрямую, потому что несколько вкладок будут использовать данные аналогичным образом со своими собственными ключами фильтрации. Я хочу использовать формулу для суммирования данных для A и D, но не могу физически фильтровать данные по этим ключам — формула должна это делать. - person Andy Phillips; 08.11.2013