CountIf() 对十六进制值的奇怪行为

问题描述 投票:0回答:1

环境: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
    表示它们不被视为等同于数字,这是正确的。
  • 正确且有争议:“计数十六进制 4”列中的三个
    3
    表示 Excel 将
    0000
    00E0
    00E1
    视为彼此相等。这对于
    0000
    00E1
    来说是正确的,它们都等于零。对于
    00E0
    是有争议的,它是不明确的,但 通常被视为等于
    1
  • 错误:
    2
    1
    的“计数十六进制”和“计数十六进制 4”每一列中的
    0001
    表示这些值均被视为等于其列中的另一个值,即错误是因为两列中还有许多其他值等于
    1
  • 错误:
    1
    1E3
    的“计数十六进制”和“计数十六进制 4”每一列中的
    01E3
    表示这些值均被视为不等于其列中的任何其他值,这是错误的,因为它们都等于
    1
    ,因此等于两列中的许多其他值。
  • 错误:表中的其他十个
    2
    没有任何意义,因为它们都是等于
    1
    的十六进制值。他们应该都是
    7
    s。

这是 Excel 中的另一个错误,还是对此行为有一些合理的解释?

excel hex countif
1个回答
0
投票

这里的一切都按预期进行。令人困惑的是指数表示法:如果

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 将十六进制值隐式转换为数字,如下所示:

  • E0 / E1 - 无效。 (这些将被
    COUNTIFS()
    视为文本。)
  • 1E1、1E2、1E3 分别是 10、1000 和 1000。
  • 1E00、1E01 和 1E02 分别是 1、10 和 100。
  • 00E0 和 00E1 都是 0(分别为 0 * 10^0 和 0 * 10^1)。
  • 01E1、01E2 和 01E3 与 1E1、1E2 和 1E3 相同(10、100、1000)。
  • 1E00、1E01 和 1E02 与 1E0、1E1 和 1E2 (1、10、100) 相同。

要查看 Excel 中的隐式转换,请尝试添加两个新列,将操作

*1
应用于您的 HexHex 4 列。您将准确地看到 Excel 将它们转换为的数值。

在转换后的列上应用

COUNTIFS()
公式将与表中的结果相同,只是
E0
E1
将变成
#VALUE!
错误,因此将被
COUNTIFS()
视为相等。

© www.soinside.com 2019 - 2024. All rights reserved.