今天,我在写 时打错了=ISNUMBER(A2\)
。我以为 Excel 会抱怨,但事实并非如此——相反,它计算公式时好像没有反斜杠一样。这对某些函数有效,但对其他函数无效。=COUNTIF(B:B,A2\)
有效,但=LEN(A2\)
会引发错误。它似乎只适用于某些函数的范围引用或名称后跟右括号。
为什么 Excel 在此处没有抛出错误?是否有我不知道的功能,或者此符号有其他用途?
答案1
将@Darren Bartrup-Cook 的评论转换为答案,A2\
会出现#NAME?
错误,但ISNUMBER()
可以处理#NAME?
错误,结果恰好与我预期的相同。我从未真正检查过我的公式是否像我想象的那样依赖于单元格 A2。
答案2
在 Excel 中,反斜杠是几个转义字符之一;特别是,它用于自定义格式字符串中以生成文字。
另一个涉及使用反斜杠的函数具体来说在公式输入范围内的可能是 Excel 的name
管理功能,其中反斜杠是合法字符(事实上,Excel 公式无法识别它们)。这让我产生了以下猜想:
- 当输入到公式中时,超出自定义数据格式或转义序列的语法范围……
- Excel 不识别“\”作为特殊字符(仅作为转义字符)。
- Excel 仅将“\”识别为 的一部分
name
。 - 因此,在所有使用“\”的情况下,Excel 都会将输入解释为
name
引用。
为了支持我的猜想,你可以观察你引用的每个公式的公式评估:=ISNUMBER(A2\)
=COUNTIF(B:B,A2\)
=LEN(A2\)
。请注意,在评估时,所有三个功能导致#NAME?
错误。
现在,回答 OP 的另一部分:为什么这些函数似乎以不一致的方式处理错误?在这里,我再次提出个人猜想:我相信它与函数本身有关,或者更具体地说,与 Excel 函数的分类分组有关。
在 Excel 中具体来说,该LEN()
功能受控于TEXT
函数类别,即,它被视为字符串操作或查询函数. 当此类函数发生错误时,它只能抛出异常(在大多数标准用例中)。
另一方面,和ISNUMBER()
都COUNTIF()
受到LOGIC
函数类别,即它们条件求值函数,也涉及布尔函数。现在,碰巧的是,在几种主要的编程语言(例如 Python 等)中,有一种特定的行为惯例是普遍观察到的:布尔值FALSE
可以表示为数值0
,就像布尔值TRUE
可以表示为数值一样1
。这据说是受到二进制表示的性质的影响,因为 TRUE 或 FALSE 表示为 1 或 0,但在ISNUMBER()
,预期输出是纯布尔值,而预期输出COUNTIF()
是数字,也可以是布尔值(免责声明:后一个结论纯粹基于我自己的推测)。为了支持我的推测,如果您在单元格中输入一个数字B1
,然后将单元格命名为B1
“A2\”,请注意所有三个函数都会立即更改其输出: