
概括
要测试单元格是否包含 x、y 或 z,可以使用OR 函数创建逻辑测试,然后使用 IF 函数计算结果。在所示示例中,D5 单元格中的公式为:
=IF(OR(ISNUMBER(SEARCH({"abc","xyz"},B5))),"x","")
单元格 D5 的结果为“x”,因为“jim@abc”包含“abc”。可以根据需要调整 IF 函数的结果。
通用配方
=IF(OR(ISNUMBER(SEARCH({"abc","xyz"},A1))),"x","")
解释
目标是根据单元格中是否包含某个子字符串来执行特定操作。大多数用户首先会想到使用 IF 函数。然而,IF 函数的一个问题是它不支持通配符, 例如“?”和“*”。这意味着我们不能单独使用 IF 函数来检测单元格中可能出现的任何子字符串,例如“abc”或“xyz” 。一种方法(如示例所示)是使用 ISNUMBER、SEARCH 和 OR 函数创建一个逻辑测试,然后使用 IF 函数返回最终结果。另一种方法是使用 COUNTIF 函数和 SUM 函数来创建逻辑测试。以下将解释这两种方法。
或 + 搜索 + ISNUMBER
SEARCH 函数用于在文本字符串中查找指定的子字符串。如果找到子字符串,SEARCH 会返回该子字符串在文本中的位置(以数字形式)。如果未找到子字符串,SEARCH 将返回 #VALUE 错误。例如:
=SEARCH("p","apple") // returns 2
=SEARCH("z","apple") // returns #VALUE!ISNUMBER 函数。ISNUMBER 对数值返回 TRUE,对其他任何值返回 FALSE:
=ISNUMBER(2) // returns TRUE
=ISNUMBER("a") // returns FALSE我们可以使用 ISNUMBER 函数将 SEARCH 的结果转换为 TRUE 或 FALSE 值,如下所示:
=ISNUMBER(SEARCH("p","apple")) // returns TRUE
=ISNUMBER(SEARCH("z","apple")) // returns FALSE如果 SEARCH 函数找到子字符串,则返回其位置(以数字形式),ISNUMBER 函数返回 TRUE。如果 SEARCH 函数未找到子字符串,则返回错误,ISNUMBER 函数返回 FALSE。这种方法本身没有问题,但此问题的难点在于我们需要检测两个子字符串,而不是一个。我们可以通过在 OR 函数中使用两次 SEARCH 和 ISNUMBER 函数来实现这一点:
=OR(ISNUMBER(SEARCH("abc",B5)),ISNUMBER(SEARCH("xyz",B5)))现在,如果其中任何一个表达式返回 TRUE,则 OR 函数将返回 TRUE 并触发 IF 函数。一种简化公式的方法是使用数组常量和单个表达式,如下所示:
=OR(ISNUMBER(SEARCH({"abc","xyz"},B5)))数组常量是一种可以存储多个值的结构体。它的工作方式类似于 Excel 中的区域,但数组常量中的值是硬编码的。因为我们给 SEARCH 函数提供了两个子字符串,所以它会返回两个结果。ISNUMBER 函数也会返回两个结果给 OR 函数,OR 函数会像之前一样对这些结果进行计算。
注意:搜索功能不区分大小写。如果您需要区分大小写的选项,可以按照此处的说明切换到查找功能。
IF 函数
综上所述,我们可以将上述公式用作 IF 函数中的逻辑测试,如下所示:
=IF(OR(ISNUMBER(SEARCH({"abc","xyz"},B5))),"x","")这是示例中单元格 D5 中使用的公式。向下复制该公式时,如果电子邮件地址包含“abc”或“xyz”,则返回“x”;否则返回空字符串“""”。您可以根据需要调整 IF 公式以返回任何值。
注意:IF 函数只是在单元格中留下一个“x”作为标记。如果目标是检索所有匹配的单元格或记录,请参阅FILTER 函数。
COUNTIF + SUM
解决此问题的另一种方法是将COUNTIF 函数与 SUM 函数结合使用,如下所示:
=IF(SUM(COUNTIF(B5,{"*abc*","*xyz*"})),"x","")这个公式的核心是 COUNTIF 函数,如果找不到任何子字符串,则返回零;如果找到至少一个子字符串,则返回一个正数。关键在于,我们为 COUNTIF 函数提供了多个子字符串作为条件,这些子字符串以“数组常量”的形式传入。因此,COUNTIF 函数会返回一个计数数组,每个条件对应一个计数。由于 COUNTIF 函数返回的是一个数组,我们需要使用 SUM 函数对数组中的所有元素求和。求和结果作为logical_test参数传递给 IF 函数。任何非零值都会被判定为 TRUE。
请注意,我们还使用了星号 (*) 作为通配符,表示子字符串两侧的零个或多个字符。这使得 COUNTIF 函数能够统计文本中任意位置的子字符串数量(即,它提供了“包含”功能)。
笔记
- 如果您要测试多个值,可以使用区域而不是数组常量 来提供要检查的值。在 Excel 2019 及更早版本中,使用区域会将公式转换为数组公式,必须使用 Ctrl + Shift + Enter 组合键输入。在当前版本的 Excel 中,无需特殊操作。
- COUNTIF 函数的 range参数只能接受范围;您不能将来自其他公式的数组传递给 COUNTIF 函数。这在使用动态数组公式时可能会造成问题,因为在动态数组公式中,将数组从一个公式传递到另一个公式更为常见。OR + SEARCH + ISNUMBER 公式则没有此限制。










