SUMPRODUCT函数

公式解析
1)官方说明:SUMPRODUCT函数返回相应范围或数组的个数之和。
2)语法:
若要使用默认操作 (乘法) :
=SUMPRODUCT (array1, [array2], [array3], ...)
- SUMPRODUCT 函数语法具有下列参数:
参数说明array1 必需其相应元素需要进行相乘并求和的第一个数组参数。[array2], [array3],... 可选2 到 255 个数组参数,其相应元素需要进行相乘并求和。
- 执行其他算术运算
像往常一样使用SUMPRODUCT,但请将分隔数组参数的逗号替换为所需的算术运算符(*、/、+、-)。执行所有操作后,结果将像往常一样进行求和。
3)难度级别:★★☆☆☆
2.基础用法举例
题目一:当sumproduct函数中参数为两个数组时,两个数组的所有元素对应相乘
公式:=SUMPRODUCT(A2:A4,B2:B4)
效果:

解析:该函数的使用,就是把参数中两个组乘积后,进行求和。
参数中数组的维度要一致。
3.扩展用法举例
题目二:单条件求和
公式:=SUMPRODUCT((A2:A10=E2)*(C2:C10))
效果:

解析:参数好像和语法中的不太一样,这种数组的写法不理解的话,可以看一下之前的文章,对数组的使用有详细的介绍。
①A2:A10=E2,这是一个数组求值,它的结果是一个垂直数组{FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE}
②(A2:A10=E2)*(C2:C10),之前的文章中介绍过,在Excel数组中,TRUE可以用1,FALSE用0来代替进行计算,这一步的结果也是一个数组:{0;0;300;0;0;600;0;0;900}
③对②中取得的数组进行求和就得到了1800
深度理解
那如果这个公式写成语法中那样会是什么样的呢?效果如下所示:
公式写法:=SUMPRODUCT((A2:A10=E2),(C2:C10))

可以看到结果是0,也就是SUMPRODUCT不是数组的直接运算时,true,false并不能当成1,0.任何非数字的成绩都是0.验证如下:

在普通的运算中,TRUE就是当成了1,但在SUMPRODUCT中TRUE没有当成1处理。那非要写成语法中那样的形式,该如何写呢,其实很简单,既然普通的计算中,是可以当成1,0来计算,那一个参数*1不就可以了吗!效果如下:

或者负负得正,如下写法也是可以的:

题目三:多条件求和
公式写法:=SUMPRODUCT(((A2:A10="华东一区")+(A2:A10="华南一区")),(C2:C10))
效果:

解析:关于数组的部分不做过多解释了,直接进行公式的分析:
①(A2:A10="华东一区")+(A2:A10="华南一区"),先来看一下这一步的结果,,它的值是一个数组{0;1;1;0;1;1;0;1;1},在逻辑值的+运算过程中,只要一个为TRUE,那结果就为TRUE,大家可以自己测试一下。
②最终的求和就比较简单了。
题目四:多条件求和2
公式:=SUMPRODUCT((A2:A10=E2)*(B2:B10=6)*(C2:C10))
效果:

解析:不做过多解释,只提一句,其它的大家自己理解。题目三中说到了,逻辑+运算,只要一个为true时,结果就为ture,这个题目用到了逻辑*,在逻辑*的运算中,所有结果为true时,结果才为true.
4.总结
- 如果使用算术运算符,请考虑将数组参数括在括号中,并使用括号对数组参数进行分组以控制算术运算的顺序。
- 逻辑值运算如下图,0为假(FALSE),非0为真(TRUE)

5.常见问题
- 数组参数必须具有相同的维数。否则,函数SUMPRODUCT将返回#VALUE!错误值#REF!。例如,=SUMPRODUCT(C2:C10,D2:D5)将返回错误,因为范围的大小不同。
- SUMPRODUCT将非数值数组条目视为零。
- 为获得最佳性能,SUMPRODUCT不应与完整列引用一同使用。请考虑=SUMPRODUCT(A:A,B:B),在此函数将A列中的1,048,576个单元格乘以B列中的1,048,576个单元格,然后再添加它们。