关于excel:检查单元格是否包含子字符串

Check whether a cell contains a substring

是否有内置函数来检查单元格是否包含给定的字符/子字符串?

这意味着您可以有条件地应用Left / Right / Mid之类的文本函数,而在缺少分隔符时不会引发错误。


尝试使用此:

1
=ISNUMBER(SEARCH("Some Text", A3))

如果单元格A3包含Some Text,则将返回TRUE


下面的公式确定文本" CHECK"是否出现在单元格C10中。如果不是,则结果为空白。如果是这样,则结果为工作"检查"。

1
=IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK")


这个公式对我来说似乎更直观:

1
=SUBSTITUTE(A1,"SomeText","") <> A1

如果" SomeText"包含在A1中,则返回TRUE。

在其他答案中提到的IsNumber / Search和IsError / Find公式当然可以工作,但是我总是发现自己需要经常查看帮助或在Excel中尝试使用这些帮助。


对于那些想使用IF语句中的单个函数来执行此操作的人,我使用

1
=IF(COUNTIF(A1,"*TEXT*"),TrueValue,FalseValue)

查看子字符串TEXT是否在单元格A1中

[注意:TEXT中必须有星号]


在Excel中签出FIND()函数。

句法:

1
FIND( substring, string, [start_position])

如果找不到子字符串,则返回#VALUE!


这是一个古老的问题,但我认为它仍然有效。

由于没有CONTAINS函数,为什么不在VBA中声明呢?
下面的代码使用VBA Instr函数,该函数在字符串中查找子字符串。如果找不到该字符串,它将返回0。

1
2
3
Public Function CONTAINS(TextString As String, SubString As String) As Integer
    CONTAINS = InStr(1, TextString, SubString)
End Function


我喜欢Rink.Attendant.6的答案。我实际上想检查多个字符串,并以此方式进行:

首先是情况:可以是房屋建筑商或社区名称的名称,我需要将建筑商归为一组。为此,我正在寻找"建筑商"或"建筑"等字眼。因此-

1
=IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community")


这是一个古老的问题,但对于使用Excel 2016或更高版本的解决方案,您可以使用新的IFS( condition1, return1 [,condition2, return2] ...)条件来消除对嵌套if结构的需求。

我对它进行了格式化,以使其在使用此问题的情况下在视觉上更加清晰:

1
2
3
4
5
=IFS(
ISERROR(SEARCH("String1",A1))=FALSE,"Something1",
ISERROR(SEARCH("String2",A1))=FALSE,"Something2",
ISERROR(SEARCH("String3",A1))=FALSE,"Something3"
)

由于如果未找到字符串,SEARCH返回错误,所以我用ISERROR(...)=FALSE包裹了字符串以检查真值,然后返回所需的值。如果SEARCH返回0而不是可读性错误,那就太好了,但是不幸的是,这就是它的工作方式。

另一个重要的注意事项是IFS将返回它首先找到的匹配项,因此排序很重要。例如,如果我的字符串是Surf, Surfing, Surfs,如上面的String1,String2,String3,而我的单元格字符串是Surfing,则由于子字符串为Surf,因此它将在第一项而不是第二项上匹配。因此,公分母需要在列表中排在最后。我的IFS必须被订购为Surfing, Surfs, Surf才能正常工作(在这个简单的示例中,交换SurfingSurfs也可以工作),但是Surf必须是最后一个。


这是我正在使用的公式

=IF( ISNUMBER(FIND(".",A1)), LEN(A1) - FIND(".",A1), 0 )