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。