我正在寻找一种方法来生成从同一列值派生的两个数组之间的sumproduct。例如:
A B C
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列中执行值的产品当列B为“ST”时,列C中的值和值。
我已经搜索了很长一段时间,但一直无法找到合适的答案。任何帮助,将不胜感激。谢谢
答案 0 :(得分:3)
正如斯科特克拉纳评论的那样(请接受他的回答,如果他写了一个):
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"
表示)才包含在最终总和中。这是使用另一个嵌套术语完成的,该术语按顺序测试指定范围的每个单元格的值:
B1:B5="FC"
返回数组[TRUE,FALSE,TRUE,FALSE,TRUE]
Excel在乘法时将TRUE/FALSE
值视为1/0
(尽管不是加法/减法),因此SUMPRODUCT
函数会看到:
[1,0,1,0,1]*[500,600,360,78,182]
=> [500,0,360,0,182]
然后添加结果产品的值:
500 + 0 + 360 + 0 + 182
= 1042
答案 1 :(得分:1)
对于这个具体的例子。
{=SUM((IF(B1:B6="FC",C1:C6,0)*IF(B2:B7="ST",C2:C7,0)))}
仅当FC和ST在示例中交替时才会起作用。如果没有,您可以通过主要对列A和第二列进行排序来快速更改它以适应此格式。
注意第二个if语句中的数组被一个单元格偏移。这允许阵列以所需的方式相乘。此外,由于它是一个数组公式,请确保在将其放入单元格时使用CTRL + SHIFT + Enter。