2

考虑以下:

    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)

ETC...,

一旦应用数学运算符,最终评估为 1 和 0,

=SUMPRODUCT({1, 0, 1},{1, 0, 1},{1, 2, 3})

我们得到了正确的值。

我们一直在为 Excel 绞尽脑汁,似乎无法正确评估它自己的输入。我们认为有一行代码缺少将 TRUE 和 FALSE 转换为 1 和 0 的 SUMPRODUCT 编译代码,并且错误捕获仅返回 0。

有什么想法吗?

4

2 回答 2

2

我环顾四周,甚至在查尔斯威廉姆斯的网站上也没有找到为什么它会以这种方式工作的答案。我认为这是一种编程选择,在其原始的“本机”(全逗号)形式 Sumproduct 仅对数字进行操作,并将任何非数字单元格视为零。

这样,A1 中引用 B1:C3 的 Sumproduct 公式将 B1 中的 TRUE 与“strimp099”相同 - 视为零。考虑到 Sumproduct 的原始、相当普通的意图,以及考虑到普通用户可能期望的结果,我认为这是有道理的。

在此处输入图像描述

于 2012-08-14T00:14:40.270 回答
2

大多数函数不会将逻辑值强制转换为数组参数中的数字,恕我直言,最好在一致性方面犯错,而不是为少数函数引入新行为。强制也有相关的性能开销,因此只应在需要时实施。

也就是说,添加了一些额外的函数,如AVERAGEA,VARA等,它们确实将逻辑值视为数字(并将文本值视为零),所以我猜也可以添加 SUMPRODUCTA 函数,但这也可能会增加混乱和应用程序膨胀。我相信这些的目的是为了与 Lotus 123 兼容。Excel 选项中还有一个转换公式评估的设置| Advanced,激活后会将 TRUE/FALSE 视为计算中的数字,SUM但许多函数似乎并未按预期响应。

于 2012-08-14T14:18:45.680 回答