Table of contents
想用通配符文本建立一个IF语句,但每次都失败? 问题不在你的公式,而在函数本身--Excel IF不支持通配符。 然而,有一种方法可以让它对部分文本匹配起作用,本教程将教你如何操作。
每当你想在Excel中进行部分或模糊匹配时,最明显的解决方案就是使用通配符。 但如果你需要使用的特定函数不支持通配符,怎么办? 可悲的是,Excel IF就是这样一个函数。 考虑到其他 "条件 "函数,如COUNTIF、SUMIF和AVERAGEIFS都能很好地使用通配符,这一点尤其令人失望。
幸运的是,这并不是能阻止一个有创造力的Excel用户的障碍:)通过将IF与其他函数相结合,你可以强迫它评估部分匹配,并获得Excel IF通配符公式的一个不错的替代方案。
为什么Excel的IF函数有通配符不工作
在下面的示例表中,假设你想检查第一列中的ID是否包含字母 "A"。 如果发现 - 在B列中显示 "是",如果没有 - 显示 "否"。
似乎在逻辑测试中包括通配符文本是一个简单的解决方案。
=IF(A2="*a*", "是", "否")
但令人遗憾的是,该公式对所有单元格都返回 "否",甚至包含 "A "的单元格。
为什么通配符IF语句会失败? 从表面上看,Excel不承认与等号或其他逻辑运算符一起使用的通配符。 仔细看一下支持通配符的函数列表,你会发现它们的语法假设通配符文本直接出现在一个参数中,比如这样。
=COUNTIF(A2:A10, "*a*")
Excel IF包含部分文本
现在你知道了通配符IF公式失败的原因,让我们试着弄清楚如何让它发挥作用。 为此,我们将简单地在IF的逻辑测试中嵌入一个接受通配符的函数,即COUNTIF函数。
IF(COUNTIF( 电池 , "* 案文 *"), value_if_true, value_if_false)采用这种方法,IF在理解通配符方面没有问题,并能完美地识别出包含 "A "或 "a "的单元格(因为COUNTIF不区分大小写)。
=IF(COUNTIF(A2, "*a*"), "是", "不是")
这个公式会进入B2,或第2行的任何其他单元格,然后你可以根据需要向下拖动它到许多单元格。
这一解决方案也可用于定位 特定模式的字符串 .假设只有由2组用连字符分开的ID是有效的,你可以使用"?-? "通配符字符串来识别它们。
=IF(COUNTIF(A2, "??-?"), "有效", "")
这个公式如何运作。
对于IF的逻辑测试,我们使用COUNTIF函数来计算匹配指定通配符字符串的单元格数量。 由于标准范围是单个单元格(A2),结果总是1(找到匹配)或0(未找到匹配)。 鉴于1等于TRUE,0等于FALSE,当计数为1时,公式返回 "有效"(value_if_true),而当计数为0时,返回空字符串(value_if_false)。计数为0。
IF ISNUMBER部分匹配的搜索公式
另一种强迫Excel IF对部分文本进行匹配的方法是在逻辑测试中包括FIND或SEARCH函数。 不同的是,FIND是大小写敏感的,而SEARCH则不是。
因此,取决于你是想把小写字母和大写字母作为相同还是不同的字符来处理,这些公式中的一个会很有效。
不区分大小写 部分匹配的公式。
如果(isnumber(search(" 案文 ", 电池 )), value_if_true, value_if_false)区分大小写 部分匹配的公式。
如果(isnumber(find(" 文本 ", 电池 )), value_if_true, value_if_false)由于这两个函数都是为了执行 "单元格包含 "类型的匹配,在这种情况下其实不需要通配符。
例如,为了检测含有 "A "或 "a "的ID,公式为:。
=IF(ISNUMBER(SEARCH("A", A2)), "是", "否")
如果只搜索大写的 "A "而忽略 "a",公式为:。
=IF(ISNUMBER(FIND("A", A2)), "是", "否")
在下面截图中的B6,你可以观察到结果的不同。
这个公式如何运作。
该公式的核心是ISNUMBER和SEARCH(或FIND)的组合。
isnumber(search("a", a2))
SEARCH函数寻找指定的文本(本例中为 "A"),并返回其在A2中的字符串中的位置。 由于SEARCH和FIND都被设计为执行 "单元格包含 "类型的匹配,在这种情况下并不真正需要通配符。
ISNUMBER函数将一个数字转换为TRUE,将包括错误在内的任何其他值转换为FALSE。 逻辑值直接进入IF的逻辑测试。 在我们的例子中,A2包含 "A",所以ISNUMBER返回TRUE。
IF(TRUE, "Yes", "No")
作为结果,IF返回为 value_if_true 参数,即为 "是"。
Excel带通配符的IF OR语句
需要识别包含通配符文本字符串之一的单元格吗? 在这种情况下,你可以将经典的IF OR语句与上面讨论的COUNTIF或ISNUMBER搜索公式相结合。
例如,要在A2中搜索 "aa "或 "bb",忽略字母的大小写,如果找到其中一个就返回 "是",请使用这些公式之一。
=IF(OR(ISNUMBER(SEARCH("aa", A2)), ISNUMBER(SEARCH("bb", A2)), "是", "" )
或
=IF(OR(COUNTIF(A2, "*aa*"), COUNTIF(A2, "*bb*")), "是", "")
将两个COUNTIF函数相加也可以,在这种情况下,加号的作用类似于OR运算符。
=IF(COUNTIF(A3, "*aa*")+COUNTIF(A3, "*bb*"), "是", "" )
不要在公式中硬编码通配符字符串,你可以在单独的单元格中输入它们,比如D2和F2,如下图所示。 请注意,这些单元格引用被$符号锁定,以便公式正确复制到下面的单元格中。
=IF(OR(COUNTIF(A2, "*"&$D$2& "*"), COUNTIF(A2, "*"&$F$2& "*"), "是", "")
上述公式对2个部分匹配很有效,但如果你要搜索3个或更多,它们就会变得太冗长。 在这种情况下,有理由以不同的方式来完成任务。
在一个数组常数中向SEARCH函数提供多个子串,计算返回的数字,并检查结果是否大于零(这意味着如果找到了至少一个子串)。
=IF(COUNT(SEARCH({"aa", "bb"}, A2))>0, "Yes", "" )
这样一来,你将以更紧凑的配方获得完全相同的结果。
Excel带通配符的IF和公式
当你想检查一个单元格是否包含两个或多个不同的子串时,最简单的方法是使用COUNTIFS函数,用通配符进行逻辑测试。
假设你想定位A列中同时包含 "b "和"2 "的单元格,要做到这一点,使用 "*b*"和 "*2*"作为COUNTIFS的标准,A2作为标准范围。
=IF(COUNTIFS(A2, "*b*", A2, "*2*"), "是", "" )
另一种方法是将IF AND公式与ISNUMBER SEARCH一起使用。
=IF(AND(ISNUMBER(SEARCH("b", A2)), ISNUMBER(SEARCH("2", A2)), "是", "" )
虽然我们在这个公式中没有包括任何通配符,但它的作用确实像在同一个单元格中搜索两个通配符字符串("*b*"和 "*2*")。
当然,没有什么能阻止你在预定义的单元格中输入搜索值,在我们的例子中是D2和F2,并为公式提供单元格引用。
=IF(AND(ISNUMBER(SEARCH($D$2, A2)), ISNUMBER(SEARCH($F$2, A2)), "是", "" )
如果你喜欢尽可能使用更紧凑的公式,那么你可能更喜欢数组常数的方法。 IF COUNT SEARCH公式与前面的例子非常相似,但由于这次两个子串都必须出现在A2中,我们检查计数是否等于2。
=IF(COUNT(SEARCH({"b", "2"}, A2))=2, "是", "")
以上是在Excel的IF语句中使用通配符的主要方法。 如果你知道其他的解决方案,其他用户一定会很感激你在评论中分享你的经验。 感谢你的阅读,希望下周在我们的博客上见到你
供下载的实践工作手册
Excel IF通配符公式示例(.xlsx文件)。