Excel SUMPRODUCT与动态列范围相加

时间:2016-08-10 18:20:34

标签: excel multiple-columns multiple-conditions

       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

我有一个类似上表的示例文件。

下面的SUMPRODUCT公式只对特定行和列求和,即第2行到第20行,列B到C求和

=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变得动态,从某种意义上说,它知道第一行将是第二行并以20结束。

对于要求和的动态列,它将取决于标准。即如果标准是2月和3月,它将再次采用C2列:D20 ......该行也是动态的。

3 个答案:

答案 0 :(得分:1)

如果您将范围转换为名为Table1的表格,则以下内容应该有效:

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

答案 1 :(得分: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)))

INDEX(A:A,MATCH("ZZZ",A:A))将在A列中找到包含文本的最后一个单元格,并使用它来设置数据集的范围。

对于Last列,我们使用INDEX(1:1,MATCH("ZZZ",1:1))

enter image description here

答案 2 :(得分:1)

如果您不打算使用ListObject(又名结构化)表,那么动态命名范围肯定有帮助。

  1. 转到公式,定义的名称,名称管理器,当“名称管理器”对话框打开时,单击“新建”。
  2. 为您定义的名称范围指定唯一名称;我选择了部门
  3. 将范围保留为工作簿,并使用以下公式参考:

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

    列A:M将涵盖部门列和Jan截至12月。请注意,2016年1月至2016年12月是格式为1/1/2016的实际日期(例如12/1/2016mmm yyyy)。
  4. 您最终应该使用以下动态命名范围:
  5. 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