Excel – 从同一列汇总两个数组

我正在寻找一种方法来产生两个数组之间的相乘值产生一个sumproduct。 例如:

ABC 1 FC 100 1 ST 5 2 FC 120 2 ST 3 3 FC 26 3 ST 7 

在这种情况下,我需要一个计算(100 * 5)+(120 * 3)+(26 * 7)的公式,换句话说,当列B为“FC”时,在列C中执行一个值的升级, C栏,B栏是“ST”。

我search了一段时间,一直无法find合适的答案。 任何帮助,将不胜感激。 谢谢

正如Scott Craner评论的那样(请接受他的回答,如果他写的话):

 SUMPRODUCT((B1:B5="FC")*(C1:C5*C2:C6)) 

这种方法使用数组引用,将它们相乘,然后获取结果的SUMPRODUCT 。 从第二套嵌套术语中解决:

  • C1:C5返回数组[100,5,120,3,26]
  • C2:C6 (由一行偏移)返回[5,120,3,26,7]

乘以这些数组给出中间数组:

  • [500,600,360,78,182]

C列中的每个数字乘以后面的数字。 然而,只有其他结果(由B列中的"FC"值表示)才被包括在最后的总和中。 这是使用另一个嵌套的术语来完成的,它按顺序testing指定范围的每个单元格的值:

  • B1:B5="FC"返回数组[TRUE,FALSE,TRUE,FALSE,TRUE]

Excel将TRUE/FALSE值作为1/0 (尽pipe不用于加/减),所以SUMPRODUCT函数看到:

  • [1,0,1,0,1]*[500,600,360,78,182] => [500,0,360,0,182]

然后添加结果产品的值:

  • 500 + 0 + 360 + 0 + 182 = 1042

对于这个具体的例子。

 {=SUM((IF(B1:B6="FC",C1:C6,0)*IF(B2:B7="ST",C2:C7,0)))} 

这只有在FC和ST交替时才会起作用。 如果没有,您可以通过对A列和B列进行sorting,快速更改为适合此格式。

注意第二个if语句被一个单元格偏移的数组。 这允许arrays以所希望的方式相乘。 此外,由于它是一个数组公式,因此请确保在将其放入单元格中时使用CTRL + SHIFT + Enter。