【问题标题】:How are boolean values treated in Excel?Excel中如何处理布尔值?
【发布时间】:2021-09-28 12:37:57
【问题描述】:

我决定学习如何使用函数SumProduct(),所以我创建了这个非常基本的 Excel 表格:

A    B
1    1
2    2

我计算了=SumProduct(A2:A3,B2:B3),结果是5,符合预期。

然后我萌生了将B2替换为=(1=1)的想法,显然是TRUE,我所见也证实了这一点。

但是,=SumProduct() 结果变为 4,显然booleans 在 Excel 中被视为零。
所以,我决定再写一个公式:=A2*B2+A3*B3(和SumProduct()完全一样),但是得到的不是期望值4,而是5。

因此,显然,常规数学运算符(*+、...)将 boolean 值视为“预期”(TRUE 变为 1,FALSE 变为 0),但对于一些更详细的功能(如SumProduct())似乎并非如此。

这背后的解释是什么?为了避免不愉快的意外,我想了解正在发生的事情。我想我正在使用 Excel-365(我怎么能确定?)。

【问题讨论】:

    标签: excel boolean sumproduct excel-365


    【解决方案1】:

    参考本文档:https://www.ablebits.com/office-addins-blog/2016/08/24/excel-sumproduct-function-formula-examples/

    这说明您需要在值之前添加--,以便将其转换为您期望的 1 或 0。因此,正如您正确观察到的那样,该函数不支持布尔值。你也可以使用IF函数,它的第一个参数是你拥有的逻辑表达式,第二个参数是1,第三个是0。关于不支持将逻辑数据隐式转换为算术数据的原因在这个功能,我认为我们将无法在在线论坛上实际确定其原因,但这是一个您可以直接向该功能的作者提出的问题。

    【讨论】:

    • 所以基本上你的意思是“大多数 Excel 函数应该以正确的方式处理布尔值,但 SumProduct() 是一个已知的例外,可以使用双重否定技巧。"?
    • 这就是为什么你大多会丢弃第二个参数并写=SUMPRODUCT(A2:A3*B2:B3)@Dominique。布尔到数字的转换是在第一个参数中完成的,其方式与您编写 =A2*B2+A3*B3 的方式相同。另一个例子是MMULT(),它不会处理布尔输入。不过问题很好=)
    • @JvdV:你的评论真的很奇怪:=sumproduct(A2:A3,B2:B3)=sumproduct(A2:A3*B2:B3) 的意思相同,但是当你已经在你的函数(毕竟这个函数叫做 Sum**Product**())? ...除此之外,似乎在某些情况下两者都不相等。 (我有一个强烈的印象,这个功能没有经过非常彻底的测试:-))
    • 恕我直言,这并不奇怪。该函数本身不会像* 那样通过硬编码的乘法来工作。就像SUM(1,2,TRUE) 仍然会忽略布尔值并返回3。在这方面,SUMPRODUCT() 并不孤单。它需要 numeric 输入。尽管布尔值可以用于硬编码计算,但它们对这些函数本身没有意义,将被丢弃。因此,我们通常在第一个参数内执行硬编码乘法。我希望这更清楚,因为我不确定对我有意义的东西是否能很好地理解 =)。
    • @Dominique 这种方法有多种功能。正如 JvdV 所指出的,SUM 是另一个例子。我同意你的观点,如果布尔值可以隐式转换为整数,那将是一件好事,而且像你一样,我不明白为什么作者不选择这种方法。但是,我确实知道的是,某些功能不支持此功能,sumproduct & co。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多