如果我使用 sumif 内置函数(Excel Microsoft Office Home & Student 2016 版本 1708),我会出现以下行为:
amount description
4 '<Sydney
4 '<Melbourne
=sumif(b1:b3,"'<Sydney",a1:a3)
Sumif 返回 8。
这是不正确的。 sumif 应该返回 4。
在单元格中输入文本时,请注意使用 ' 进行字符串转义。
知道我在这里做错了什么吗?
值得注意的是,该问题似乎与使用尖括号 (char(60)) 有关。我很高兴可以使用 substitute() 函数解决此问题 - 但我想了解此问题的原因以及如何告诉 excel 将 char(60) 视为字符串。
有任何想法吗?
请注意 - 如果仅使用连字符 (char(45)),则 sumif 不会出现任何问题。例如:
amount description
4 '-Sydney
4 '-Melbourne
=sumif(b1:b3,"'-Sydney",a1:a3)
这个数字正确地加起来是 4。
答案1
问题在于
=sumif(b1:b3,"<Sydney",a1:a3)
(我假设条件参数"<Sydney"
不是"'<Sydney"
问题中所述的,因为它将返回 0。)
条件参数将前导字符<
视为“小于”比较。因此,条件"<Sydney"
将被解释为小于字符串的 ASCII 值(或 Unicode 值?)。因此,以、 和Sydney
为前导字符的字符串都“小于”字符串。A
R
<
Sydney
要修复此问题,您可以将函数更改为:
=sumif(b1:b3,"=<Sydney",a1:a3)
=
条件参数将告诉 Excel“仅对单元格是平等的到<Sydney
,因此返回正确的结果。
为了进一步说明,请尝试以下示例数据:
[Col A] [Col B]
[Row 1] 1 <
[Row 2] 2 A
[Row 3] 4 S
[Row 4] 8 Z
=SUMIF(B1:B4,"<S",A1:A4) [3]
=SUMIF(B1:B4,"<=S",A1:A4) [7]
=SUMIF(B1:B4,"=S",A1:A4) [4]
=SUMIF(B1:B4,">S",A1:A4) [8]
=sumif(b1:b3,"-Sydney",a1:a3)
按预期工作,因为-
没有任何意义,因此 Excelsumif
默认将 B1:B3 中的每个单元格与整个字符串进行比较-Sydney
,并且仅当两个字符串相同时才求和。