第3个回答 2010-07-17
=SUMPRODUCT((B:B="个人")*(C:C="B")*(D:D="2007"),A:A)
SUMPRODUCT的用途是“再给定的几组数组中将数组间对应的元素相乘,并返回乘积之和。这个是sumproduct的帮助说明。
SUMPRODUCT(array1,array2,array3, ...) 是标准写法。
=SUMPRODUCT(($A$2:$A$42=$D3)*($B$2:$B$42=E$2))公式中,其实就写了sumproduct的一个参数。即($A$2:$A$42=$D3)*($B$2:$B$42=E$2)作为array1参数。后面的参数都不写了,其实就等于对array1即($A$2:$A$42=$D3)*($B$2:$B$42=E$2)数组求和。
至于为何不写成=SUMPRODUCT(($A$2:$A$42=$D3),($B$2:$B$42=E$2))?这是因为SUMPRODUCT(array1,array2,array3, ...) 帮助里写了很明确一点“函数 SUMPRODUCT 将非数值型的数组元素作为 0 处理。 ”也就是说逻辑判断结果Ture也作为0处理。这个不是我们所希望看到的。
所以使用($A$2:$A$42=$D3)*($B$2:$B$42=E$2),只要逻辑判断值参与了计算,excel就自动将逻辑判断值转换为数字。我们再对数字使用sumproduct就可以了。
注:sumprodcut数组函数在输入后可以不用三键输入。sum也可以实现以上功能,但是需要ctrl+shift+enter三键输入。
注:sumprodcut数组函数在输入后可以不用三键输入。sum也可以实现以上功能,但是需要ctrl+shift+enter三键输入。
=SUMPRODUCT(($A$2:$A$42=$D3),($B$2:$B$42=E$2))可以写成=SUMPRODUCT((0+$A$2:$A$42=$D3),(0+$B$2:$B$42=E$2))
sumproduct会将0+true,1×true的结果强制转为1.