
概括
要测试单元格或文本字符串是否包含数字,可以使用FIND 函数和COUNT 函数。要查找的数字以数组常量的形式提供。例如,D5 单元格中的公式为:
=COUNT(FIND({0,1,2,3,4,5,6,7,8,9},B5))>0
公式向下复制时,如果值包含数字,则返回 TRUE,否则返回 FALSE。下面提供了一个基于 SEQUENCE 函数的替代公式。
通用公式
=COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A1))>0
解释
在这个例子中,目标是检查 B 列中的密码是否包含数字。这是一个出乎意料的棘手问题,因为 Excel 没有直接检查文本字符串中是否包含数字的函数。请注意,这与检查单元格值是否为数字不同。您可以使用ISNUMBER 函数轻松完成后者。然而,在本例中,我们需要检查单元格值是否包含数字,而数字可能出现在任何位置。一种解决方案是使用带有数组常量的 FIND 函数。在支持动态数组公式的Excel 365中,您可以使用基于 SEQUENCE 函数的不同公式。以下将解释这两种方法。
查找函数
FIND 函数用于在文本字符串中查找特定的子字符串。如果 FIND 找到该子字符串,它会返回该子字符串在文本中的位置(以数字形式)。如果未找到该子字符串,FIND 将返回 #VALUE 错误。例如:
=FIND("p","apple") // returns 2
=FIND("z","apple") // returns #VALUE!
我们也可以用同样的方法来检查数字:
=FIND(3,"app637") // returns 5
=FIND(9,"app637") // returns #VALUE!
本例中的难点在于我们需要检查 B 列中 0 到 9 这十个不同的数字的值。一种方法是将这些数字作为数组常量{0,1,2,3,4,5,6,7,8,9} 提供。单元格 D5 中的公式就采用了这种方法:
=COUNT(FIND({0,1,2,3,4,5,6,7,8,9},B5))>0
在 COUNT 函数内部,FIND 函数被配置为在单元格 B5 中查找所有十个数字:
FIND({0,1,2,3,4,5,6,7,8,9},B5)
因为我们给 FIND 函数指定了 10 个要查找的值,所以它会返回一个包含 10 个结果的数组。换句话说,FIND 函数会检查 B5 单元格中的文本是否包含每个数字,并一次性返回所有结果:
{#VALUE!,4,5,6,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!}
除非你经常接触数组,否则这段代码看起来可能相当晦涩难懂。以下是它的解释:数字 1 位于位置 4,数字 2 位于位置 5,数字 3 位于位置 6。其他所有数字均未找到,并返回了 #VALUE 错误。
我们现在离最终公式非常接近了。我们只需要统计结果。为此,我们 将上面的 FIND 公式嵌套在COUNT 函数中,如下所示:
=COUNT(FIND({0,1,2,3,4,5,6,7,8,9},B5))
FIND 函数直接将结果数组传递给 COUNT 函数,COUNT 函数统计数组中数字的数量。COUNT 函数只统计数值,忽略错误。这意味着,如果待测值中包含任何数字,COUNT 函数都会返回一个大于零的数字。例如,对于单元格 B5,COUNT 函数返回 3。
最后一步是检查 COUNT 函数的结果,并强制返回 TRUE 或 FALSE。我们通过在公式末尾添加“">0”来实现这一点:
=COUNT(FIND({0,1,2,3,4,5,6,7,8,9},B5))>0
现在该公式将返回 TRUE 或 FALSE。要显示自定义结果,可以使用IF 函数:
=IF(COUNT(FIND({0,1,2,3,4,5,6,7,8,9},B5))>0, "Yes", "No")
原公式现在作为logical_test 参数嵌套在 IF 函数中。如果 B5 单元格包含数字,则此公式返回“是”,否则返回“否”。
序列功能
在提供动态数组公式的Excel 365 中,我们可以采用不同的方法来解决这个问题。
=COUNT(--MID(B5,SEQUENCE(LEN(B5)),1))>0
这未必是更好的方法,只是解决同一问题的另一种方式。其核心是使用MID 函数 和SEQUENCE 函数将单元格 B5 中的文本拆分成一个数组:
MID(B5,SEQUENCE(LEN(B5)),1)
从内到外,LEN 函数返回单元格 B5 中文本的长度:
LEN(B5) // returns 6
该数字将作为 rows 参数返回给 SEQUENCE 函数,SEQUENCE 返回一个包含 1-6 之间数字的数组:
=SEQUENCE(LEN(B5))
=SEQUENCE(6)
={1;2;3;4;5;6}
该数组作为start_num参数返回给 MID 函数,并且当num_chars设置为 1 时,MID 函数返回一个包含单元格 B5 中字符的数组:
=MID(B5,{1;2;3;4;5;6},1)
={"a";"b";"c";"1";"2";"3"}
现在我们可以将原公式简化为:
=COUNT(--{"a";"b";"c";"1";"2";"3"})>0
我们使用双否定符号(--)来让 Excel 尝试将数组中的值强制转换为数字。结果如下所示:
=COUNT({#VALUE!;#VALUE!;#VALUE!;1;2;3})>0
双否定 (--) 创建的数学运算,成功时返回一个实际数字,失败时返回 #VALUE! 错误。COUNT函数会统计数字个数,忽略任何错误,并返回 3。如上所述,我们使用“">0", 检查最终计数,单元格 B5 的结果为 TRUE。
注意:正如你可能猜到的那样,你可以轻松地调整此公式来计算文本字符串中的数字。
单元格等于数字吗?
请注意,如果您只想测试单元格是否等于某个数字,那么上面的公式就过于复杂了。在这种情况下,您可以简单地使用ISNUMBER 函数,如下所示:
=ISNUMBER(A1)









