此篇为学习笔记。
1、基本用法
sumproduct 的正常用法是
= sumproduct(array1, array2, array3, ...)
它可以支持最高 30 个参数。但必须要注意,这里每个参数都必须为数值型,连逻辑型都不行。所以任何以下式子得到的结果都是 0 :
= sumproduct(A1:A100, B1:B100<>"a") ' 错误用法,结果总是返回0!
解决方法之一是通过显性或隐性的转换将逻辑值转为数值型:
= sumproduct(A1:A100, N(B1:B100<>"a")) ' 显性转换
= sumproduct(A1:A100, --(B1:B100<>"a")) ' 隐性转换,速度更快,推荐
另一个方法是使用连乘:
= sumproduct((A1:A100)*(B1:B100<>"a"))
来个复杂的:
= sumproduct((A1:A100)*(B1:B100<>"a")*((C1+C100)-(E1:E100)*(F1:F100)))
使用连乘和加减的技术原理可参考Excel 区域计算的原理。它比上面的多参数形式运算速度要稍微慢一些,但也有以下两个好处:
- 连乘的表达式不需要转换逻辑表达式,写法更为简单。
- 连乘可突破最多 30 个参数式子的限制。
2、和 sumifs 的区别
office 2007 引入了 sumifs ,可进行多条件求和,可以部分实现 sumproduct 的功能。但 sumproduct 有一个功能, sumifs 无法做到。比如:
= sumproduct((A1:A100)*((B1:B100="a")+(B1:B100="b")))
即 sumproduct 可以实现嵌套的条件求和(包括 and 和 or ),而 sumifs 只能实现并列条件求和(即只能是 and )。其实 sumproduct 的适用范围要宽的多,比如以下条件求和, sumifs 都无法实现:
= sumproduct((A1:A100)*((C1:C100+D1:D100)>0))
' sumproduct可对不同区域进行预算
= sumproduct((A1:A100)*(C1:C100
Q. E. D.