2016-08-10 2 views
1
 A  B  C  D 
1 Department Jan Feb Mar 
2 Marketing 100 200 300 
3 R&D   150 250 350 
4 Marketing 300 400 500 

У меня есть пример файла, подобного приведенной выше таблице.Excel SUMPRODUCT с динамическим диапазоном столбцов в сумме

SUMPRODUCT ниже формула только суммирует конкретные строки и столбец, который является строкой 2 до 20, а столбец В к С для суммирования

=SUMPRODUCT((A2:A20="Marketing")*(B2:C20)) 

Фактической формулы (из комментариев):

=SUMPRODUCT(INDEX(BW!$A$3:$AE$3,MATCH(C$35,BW!$1:$1,0)+MATCH("JAN 2016",BW!$F$2:$R$2,0)-1):INDEX(BW!$A$108:$AE$108,MATCH(C$35,BW!$1:$1,0)+MATCH("A‌​UG 2016",BW!$F$2:$R$2,0)-1)*(BW!$B$3:$B$108=$E$1)) 

Мои вопросы, есть ли способ сделать SUMPRODUCT динамичным, в известном смысле, он знает, что первая строка будет равна 2 и заканчивается на 20.

Что касается динамического столбца, то это будет зависеть по критериям. т. е. если критерием является февраль и март, это займет столбец C2: D20 ... снова, строка также динамична.

+0

Где формула должна получить * фев * и * Март * от? Где он сейчас получает * Jan * и * Feb *? – Jeeped

+0

@ Jeeped В настоящее время это моя формула ... не как выше. '= SUMPRODUCT (INDEX (BW! $ A $ 3: $ AE $ 3, MATCH (C $ 35, BW! $ 1: $ 1,0) + MATCH (" JAN 2016 ", BW! $ F $ 2: $ R $ 2,0) -1): INDEX (BW! $ A $ 108: $ AE $ 108, MATCH (C $ 35, BW! $ 1: $ 1,0) + MATCH («AUG 2016», BW! $ F $ 2: $ R $ 2,0) -1) * (BW! $ B $ 3: $ B $ 108 = $ E $ 1)) ' –

+0

Похоже, вы на самом деле набрали' 'UG 2016'' на листе и не использовали правильную дату, отформатированную как' ммм yyyy'. – Jeeped

ответ

1

Если вы включите ваш выбор в таблицу под названием Table1 то должно работать:

=SUMPRODUCT((Table1[Department]="Marketing")*(INDIRECT("Table1[[Jan]:["&VLOOKUP("*",Table1[#Headers],COLUMNS(Table1),FALSE)&"]]"))) 
1

Чтобы сделать динамику SUMPRODUCT мы можем использовать INDEX/MATCH найти экстентов данных.

Тогда все, что нужно, чтобы положить месяцев хотели перечисленные в одной клетке, я использовал I7

=SUMPRODUCT((ISNUMBER(SEARCH($B$1:INDEX(1:1,MATCH("ZZZ",1:1)),I7)))*($A$2:INDEX(A:A,MATCH("ZZZ",A:A))="Marketing")*B2:INDEX(A:DD,MATCH("ZZZ",A:A),MATCH("ZZZ",1:1))) 

The INDEX(A:A,MATCH("ZZZ",A:A)) найти последнюю ячейку с текстом в колонке А, и использовать, чтобы установить степень набора данных.

Для последней колонке мы используем INDEX(1:1,MATCH("ZZZ",1:1))

enter image description here

1

Если вы не собираетесь работать с ListObject (ака Структурированная) таблица, то динамический именованный диапазон, безусловно, поможет.

  1. Перейдите к формулам, определенным именам, диспетчеру имен и при открытии диалогового окна «Диспетчер имен» нажмите «Создать».
  2. Дайте вашему определенному диапазону имен уникальное имя; Я выбрал Отделы.
  3. Оставьте Scope как книги и использовать следующую формулу для Обозначает:

    =BW!$A$1:INDEX(BW!$A:$M, MATCH("zzz",BW!$A:$A), MATCH(1E+99,BW!$1:$1))

    Колонки A: M будет охватывать колонку отдела и Яну через декабрь Обратите внимание, что Ян 2016-Dec 2016 являются реальными датами (например, 1/1/2016 до 12/1/2016) отформатирован как mmm yyyy.
  4. Вы должны закончить со следующим динамическим диапазоном по имени:

departments

Теперь вы можете «форма» участки определенного диапазона с использованием INDEX/MATCH пары функций.

=SUMPRODUCT((INDEX(Departments, 0, 1)=Q3)* 
      (INDEX(Departments, 0, MATCH(R3, INDEX(Departments, 1, 0), 0)): 
      INDEX(Departments, 0, MATCH(S3, INDEX(Departments, 1, 0), 0)))) 

departments_FORMULA

Смежные вопросы