sumproduct函数在多条件统计中具有王者之风,是一个Excel高手必备的技能之一。
基本用法 = 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"))使用连乘的技术原理可参考Excel区域计算的原理。它比上面的多参数形式运算速度要稍微慢一些,但也有以下两个好处:
·连乘的表达式不需要转换逻辑表达式,写法更为简单。 = 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((A1:A100)*(C1:C100<D1:D100))
= sumproduct((A1:A100)*(LOG(C1:C100,2))) = sumproduct((A1:A100)*((B1:B100="a")+(B1:B100="b"))){= sum((A1:A100)*((B1:B100="a")+(B1:B100="b")))}但数组公式难以被理解,输入速度慢(无法拖动等等),并且一般情况下数组公式比普通公式效率要低,所以能用普通函数实现的功能,建议直接使用普通函数。
加权平均值
= sumproduct(value*weight) / sum(weight)公式可包含数据 = sumproduct((A1:A4)*{1;2;3;4}) 注意下面公式得到的结果是一样的,但运算效率要低很多。从Excel区域计算的原理知道,下面的式子中sumproduct的参数被展开成一个4×4的方块,所以运算速度要慢一个级别(线性 vs 平方): = sumproduct((A1:A4)*{1,2,3,4}) 这里区别在于”;”号表示换行,而”,”号表示下一列,所以{1;2;3;4}是一个列向量,而{1, 2, 3, 4}是一个行向量。我们也可以将其结合,{1,2,3,4;5,6,7,8;9,10,11,12;}是一个3×4的矩阵。 |
|
来自: ldjsld > 《电脑手机及电子技术》