检查单元格是否包含子字符串


229

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

这将意味着你可以申请文本的功能,如Left/ Right/ Mid上没有界定时字符缺失引发错误条件的基础。

Answers:


374

尝试使用此:

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

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


7
狡猾!谢谢gwin003 :)我仍然感到有点惊讶,因为它没有更直观的功能。
geotheory 2013年

18
是的,我同意,如果有一个CONTAINS("Text", cell)功能会很好。
gwin003 2013年

20
可能是值得的注意,这我不区分大小写的,如果你想匹配的情况下,你应该使用FIND()的地方SEARCH()
代码赛马

7
使用,而不是时出错;。将提供的公式更改为=ISNUMBER(SEARCH("Some Text"; A3))有效后。谢谢!
renatov 2015年

6
@renatov实际上取决于您的操作系统的语言环境;具体来说,是用于“列表分隔符”的字符。
pepoluan

22

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

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

您可以在行首使用4个空格或制表符来突出显示代码块。
NiematojakTomasz 2015年

@Steve,谢谢;)
Dimitri

12

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

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

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

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


12

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

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

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

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


它可以工作,但是当海量数据时使用COUNTIF公式会使文件无响应,甚至文件大小也变得很大
Gaurravs

8

FIND()在Excel中签出功能。

句法:

FIND( substring, string, [start_position])

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


是的,嵌套在ISNUMBER此字段中也可以,仅适用于区分大小写的匹配。
geotheory,2016年

1

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

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

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

欢迎来到SO。您应该仔细阅读什么才是一个好的答案
geotheory,2016年

我不明白这是什么意思。它会两次检查构建器,而大概一次就足够了。如果找到构建器,则返回构建器,否则返回社区。构造一词在任何地方都不会出现。也许像=OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))
惊人的

COUNTIFSCOUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk

1

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

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

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

提高个人效率的好方法,但我会说::)
geotheory)

0

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

我已经格式化了它,以使它在此问题的情况下在视觉上更清楚如何使用:

=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正确地工作(交换,Surfing并且Surfs在这个简单的示例中也可以工作),但Surf必须是最后一个。


大多数人会想要if / else能力,换句话说就是默认值。添加此引号可能会扩大您的回答的吸引力:“如果所有测试均返回FALSE(即为假,则为值),无法设置默认值。相反,对于最后一个测试,请输入TRUE,然后将值返回为如果为FALSE
则为

-3

这是我正在使用的公式

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


这将检查是否为“。” 包含在A1中,如果存在,它将返回... A1中剩余的字符数,以“。”开头。不确定此处是否需要其他计算。
级“呃,”培根

至少,使用IFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.