请考虑以下事项:
A B C
----------------
1 a c 1
2 b f 2
3 a c 3
...
6 a c 4
此处的目标是使用条件SUMPRODUCT,以便当第6行中的值与其各自列中的值匹配时,将计算SUMPRODUCT。这是有趣的事情。
使用时:
=SUMPRODUCT((A3:A5=A1),(B3:B5=B1),C3:C5)
输入参数计算为:
=SUMPRODUCT({TRUE, FALSE, TRUE},{TRUE, FALSE, TRUE},{1, 2, 3})
但结果是0。
现在,在使用数学运算符对公式进行评估之前,将布尔值TRUE和FALSE转换为1和0对应项时,会填充正确的结果:
=SUMPRODUCT(--(A3:A5=A1),--(B3:B5=B1),C3:C5)
或
=SUMPRODUCT(ABS(A3:A5=A1),ABS(B3:B5=B1),C3:C5)
或
=SUMPRODUCT((A3:A5=A1)^2,(B3:B5=B1)^2,C3:C5)
等......,
一旦应用了数学运算符,最终会计算为1和0,
=SUMPRODUCT({1, 0, 1},{1, 0, 1},{1, 2, 3})
我们得到了合适的价值。
我们一直在思索Excel,似乎无法正确评估它自己的输入。我们认为有一行代码缺少SUMPRODUCT编译代码,它将TRUE和FALSE转换为1和0,错误捕获只返回0。
有什么想法吗?
答案 0 :(得分:2)
我环顾四周,即使在查尔斯威廉姆斯的网站上也没有找到答案,为什么它以这种方式运作。我认为这是一个编程选择,在其原始的“原生”(所有逗号)形式中,Sumproduct仅对数字进行操作,并将任何非数字单元格视为零。
这样,A1中引用B1:C3的Sumproduct公式将B1中的TRUE视为与“strimp099”相同 - 为零。我认为这是有意义的,因为Sumproduct的原始,相当行人,意图,并给出了普通用户可能期望的结果。
答案 1 :(得分:2)
大多数函数不会将逻辑值强制转换为数组参数中的数字,而恕我直言,最好是在一致性方面犯错,而不是为少数函数引入新行为。强制还具有相关的性能开销,因此只应在需要时实施。
那里说了一些额外的功能,比如AVERAGEA
,VARA
等,它们将逻辑值视为数字(和文本值为零),所以我想也可以添加SUMPRODUCTA函数但这也可能增加混乱和应用膨胀。我相信这些的目的是为了与Lotus 123的兼容性。 Excel选项中还有 Transition Formula Evaluation 的设置。高级,激活时将TRUE / FALSE视为SUM
等计算中的数字,但许多函数似乎没有按预期响应。