是否有内置函数来检查单元格是否包含给定的字符/子字符串?
这意味着您可以有条件地应用Left / Right / Mid之类的文本函数,而在缺少分隔符时不会引发错误。
尝试使用此:
1
| =ISNUMBER(SEARCH("Some Text", A3)) |
如果单元格A3包含Some Text,则将返回TRUE。
-
狡猾!谢谢gwin003 :)我还是有点惊讶,因为它没有一个更直观的功能。
-
是的,我同意,如果有一个CONTAINS("Text", cell)函数会很好。
-
一开始我有些固执:您确实需要同时使用ISNUMBER和SEARCH。我在IF中使用它,并想到了:=IF(ISNUMBER(SEARCH($G$1,A73)), A73, B73)
-
我想上面的方法也一样,唯一的区别是如果单元格中的A73值为true,则为false,B73值为true
-
可能值得一提的是,我不区分大小写,如果要区分大小写,则应使用FIND()代替SEARCH()
-
使用,而不是;时出错。将提供的公式更改为=ISNUMBER(SEARCH("Some Text"; A3))后,它可以工作。谢谢!
-
@renatov实际上取决于您的操作系统的语言环境;具体来说,是用于"列表分隔符"的字符。
-
代码太长了!如果要读取的IF(OR(ISNUMBER(SEARCH(...),ISNUMBER(SEARCH(...))))!!!应该是:If(C4.Contains(" something")or C4.Contains("")),因此它易于阅读和维护。
-
Excel已经存在了很长时间,但它仍然没有一个好的表达式生成器。我最近开始制作Telerik报表,而Im实际上对使用表达式生成器构建表达式非常满意。可以通过从选项的下拉菜单中进行选择来比较事物,例如" ="," <>","包含","开始于"。这么容易。如果它必须是代码,那么让我们使用JS之类的普通代码。否则,请使用易于使用的表达式生成器。
-
如果要在后续运算(MID)中使用结果(字串位置),建议输入IFERROR,例如IFERROR(SEARCH("Some Text", A3), 0)。
-
为了确保您实际上没有在另一个子字符串中匹配一个子字符串(是的,没错),您可以使用=ISNUMBER(FIND(" Some Text",""&A3""))注意空格。
下面的公式确定文本" CHECK"是否出现在单元格C10中。如果不是,则结果为空白。如果是这样,则结果为工作"检查"。
1
| =IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK") |
-
您可以在行首使用4个空格或制表符来突出显示代码块。
-
@Steve,谢谢;)
这个公式对我来说似乎更直观:
1
| =SUBSTITUTE(A1,"SomeText","") <> A1 |
如果" SomeText"包含在A1中,则返回TRUE。
在其他答案中提到的IsNumber / Search和IsError / Find公式当然可以工作,但是我总是发现自己需要经常查看帮助或在Excel中尝试使用这些帮助。
对于那些想使用IF语句中的单个函数来执行此操作的人,我使用
1
| =IF(COUNTIF(A1,"*TEXT*"),TrueValue,FalseValue) |
查看子字符串TEXT是否在单元格A1中
[注意:TEXT中必须有星号]
-
它有效,但是当海量数据时使用COUNTIF公式会使文件无响应,甚至文件大小也会变大
在Excel中签出FIND()函数。
句法:
1
| FIND( substring, string, [start_position]) |
如果找不到子字符串,则返回#VALUE!。
-
嵌套在ISNUMBER中的yes也适用,仅适用于区分大小写的匹配。
这是一个古老的问题,但我认为它仍然有效。
由于没有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 |
-
提高个人效率的好方法,但要以重复性为代价Id说:)
我喜欢Rink.Attendant.6的答案。我实际上想检查多个字符串,并以此方式进行:
首先是情况:可以是房屋建筑商或社区名称的名称,我需要将建筑商归为一组。为此,我正在寻找"建筑商"或"建筑"等字眼。因此-
1
| =IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community") |
-
欢迎来到SO。您应该仔细阅读什么才是一个好的答案。
-
我不明白这是什么意思。.它两次检查构建器,大概一次就足够了。如果找到构建器,则返回构建器,否则返回社区。构造这个词不会出现在任何地方。也许像=OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))这样的东西?
-
有COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
这是一个古老的问题,但对于使用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才能正常工作(在这个简单的示例中,交换Surfing和Surfs也可以工作),但是Surf必须是最后一个。
-
大多数人会想要if / else能力,换句话说就是默认值。添加此引号可能会扩大答案的吸引力:"如果所有测试都返回FALSE(即为假,则为值),无法设置默认值。相反,对于上一个测试,请输入TRUE,然后将值返回为如果为FALSE,则为默认值"
这是我正在使用的公式
=IF( ISNUMBER(FIND(".",A1)), LEN(A1) - FIND(".",A1), 0 )
-
这将检查是否为"。"包含在A1中,如果存在,它将返回... A1中剩余的字符数,以"。"开头。不确定此处是否需要其他计算。
-
至少使用IFERROR(LEN(A1) - FIND(".", A1), 0)