环境:Windows 11 Pro 64下的Excel 2021。
我们知道 Excel 的 CountIf() 具有令人讨厌的行为:在计数之前将看起来像数字的文本转换为数字。但现在看来,它甚至无法对十六进制值正确执行这些转换。
考虑以下电子表格:
十进制 | 十六进制 | 十六进制 4 | 计算小数 | 计算十六进制 | 数十六进制 4 | 注意 |
---|---|---|---|---|---|---|
手册 | =DEC2HEX(A4) | =DEC2HEX(A4, 4) | =COUNTIFS(A:A, A4) | =COUNTIFS(B:B, B4) | =COUNTIFS(C:C, C4) | 手册 |
0 | 0 | 0000 | 1 | 1 | 3 | |
1 | 1 | 0001 | 1 | 2 | 2 | |
224 | E0 | 00E0 | 1 | 1 | 3 | 将 0^0 视为 0 |
225 | E1 | 00E1 | 1 | 1 | 3 | 0^1 = 0 |
481 | 1E1 | 01E1 | 1 | 2 | 2 | 1^0 = 1 |
482 | 1E2 | 01E2 | 1 | 2 | 2 | 1^2 = 1 |
483 | 1E3 | 01E3 | 1 | 1 | 1 | 1^3 = 1 |
7680 | 1E00 | 1E00 | 1 | 2 | 2 | 1^0 = 1 |
7681 | 1E01 | 1E01 | 1 | 2 | 2 | 1^1 = 1 |
7682 | 1E02 | 1E02 | 1 | 2 | 2 |
我们可以看到:
1
的“计数十六进制”列中的 0
表示“十六进制”列中的其他任何内容均被视为等于 0,这是正确的。1
和 E0
的“计数十六进制”列中的两个 E1
表示它们不被视为等同于数字,这是正确的。3
表示 Excel 将 0000
、00E0
和 00E1
视为彼此相等。这对于 0000
和 00E1
来说是正确的,它们都等于零。对于 00E0
是有争议的,它是不明确的,但 通常被视为等于 1
。2
和 1
的“计数十六进制”和“计数十六进制 4”每一列中的 0001
表示这些值均被视为等于其列中的另一个值,即错误是因为两列中还有许多其他值等于 1
。1
和 1E3
的“计数十六进制”和“计数十六进制 4”每一列中的 01E3
表示这些值均被视为不等于其列中的任何其他值,这是错误的,因为它们都等于 1
,因此等于两列中的许多其他值。2
没有任何意义,因为它们都是等于1
的十六进制值。他们应该都是7
s。这是 Excel 中的另一个错误,还是对此行为有一些合理的解释?
这里的一切都按预期进行。令人困惑的是指数表示法:如果
x
和 y
是数字,xEy
表示“x
乘以 10 的 y
次方” - not“x
次方” y
”。
例如,1E2 表示“1 乘以 10^2”= 1 * 100 = 100,而 0E0 明确表示“0 乘以 10^0”,即 0(因为 10^0 被明确定义为 0) .
因此 Excel 将十六进制值隐式转换为数字,如下所示:
COUNTIFS()
视为文本。)要查看 Excel 中的隐式转换,请尝试添加两个新列,将操作
*1
应用于您的 Hex 和 Hex 4 列。您将准确地看到 Excel 将它们转换为的数值。
在转换后的列上应用
COUNTIFS()
公式将与表中的结果相同,只是 E0
和 E1
将变成 #VALUE!
错误,因此将被 COUNTIFS()
视为相等。