2013-11-08 2 views
2

Я пытаюсь вернуть сумму диапазона ячеек, если связанное значение находится в диапазоне значений, используемых в качестве условий фильтрации , Например, используя следующую таблицу данных: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 для покрытия максимально реалистичных случаев (например, 10ish) кажется чрезмерным, и я чувствую например, должен быть более простой способ.

В моей голове, формула будет выглядеть следующим образом:

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

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

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

Спасибо!

EDIT: Спасибо, барри гудини за ответ! См. Комментарии его публикации для общего решения для суммирования на основе нескольких диапазонов допустимых критериев.

ответ

6

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

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

Если Sum_Keys имеет 4 значения, то формула SUMIFS возвращает 4 значения «массив» (по одному для каждого ключа в Sum_Keys), так что вы тогда нужна другая функция для суммирования этого массива. Я использую SUMPRODUCT, потому что он избегает необходимости в «записи массива».

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

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

+0

Любопытный вопрос - можете ли вы сделать это для нескольких полей? Например, '= SUMPRODUCT (SUMIFS (значения, ключ, сумма_кей, даты, суммы_данные))'? Это работает, если Sum_Dates - только одно значение, но если это диапазон, он возвращает только первое совпадение. –

+0

Это сложнее ...один из Sum_Keys и Sum_Dates должен быть столбцом значений и должен быть строкой значений, тогда он работает - если они оба столбца (или обе строки), вы можете TRANSPOSE один в формуле - = SUM (SUMIFS (Values, Key , Sum_Keys, Dates, TRANSPOSE (Sum_Dates0)) - для этого требуется CTRL + SHIFT + ENTER –

+1

... также вы достигли предела с помощью двух разных критериев - чтобы сделать неограниченный (почти) переход к синтаксису SUMPRODUCT, например '= SUMPRODUCT (ISNUMBER (MATCH (Key, Sum_Keys, 0)) * ISNUMBER (MATCH (Даты, Sum_Dates, 0)), Значения) '.... хотя это будет медленнее, чем SUMIFS, особенно со целыми столбцами –

0

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

= SUBTOTAL()

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

+0

Извините, если я не был ясен: я не могу фильтровать данные непосредственно, потому что несколько вкладок будет использовать данные подобным образом со своими собственными ключами фильтрации. Я хочу использовать формулу для суммирования данных для A и D, но не могу физически фильтровать данные по этим ключам - формула должна это делать. –