检查一个字符串是否包含另一个字符串

我想知道一个字符串中是否包含一个“,”(逗号)。除了逐字符读取,我们还有其他选择吗?

953437 次浏览

使用Instr函数(旧版本的MSDN doc找到在这里)

Dim pos As Integer


pos = InStr("find the comma, in the string", ",")

将返回15在pos

如果没有找到,则返回0

如果你需要用excel公式找到逗号,你可以使用=FIND(",";A1)函数。

请注意,如果你想使用Instr来查找字符串的位置,不区分大小写,请使用Instr的第三个参数,并将const vbTextCompare赋给它(对于顽固分子,只需1)。

Dim posOf_A As Integer


posOf_A = InStr(1, "find the comma, in the string", "A", vbTextCompare)

得到的值是14。

注意,在这种情况下,您必须指定起始位置,正如我链接的规范:如果指定了compare,则必须使用start参数。所述

还有InStrRev函数,它做相同类型的事情,但从文本的结尾到开头开始搜索。

根据@rene的回答…

Dim pos As Integer
pos = InStrRev("find the comma, in the string", ",")

...仍然会返回15到pos,但如果字符串有多个搜索字符串,比如单词“the”,那么:

Dim pos As Integer
pos = InStrRev("find the comma, in the string", "the")

...将返回20到pos,而不是6。

基于Rene的回答,你也可以编写一个函数,如果子字符串存在,则返回TRUE,如果不存在则返回FALSE:

Public Function Contains(strBaseString As String, strSearchTerm As String) As Boolean
'Purpose: Returns TRUE if one string exists within another
On Error GoTo ErrorMessage
Contains = InStr(strBaseString, strSearchTerm)
Exit Function
ErrorMessage:
MsgBox "The database has generated an error. Please contact the database administrator, quoting the following error message: '" & Err.Description & "'", vbCritical, "Database Error"
End
End Function

你也可以使用特殊的词like:

Public Sub Search()
If "My Big String with, in the middle" Like "*,*" Then
Debug.Print ("Found ','")
End If
End Sub

你不会真的想这样做,因为现有的Instr/InstrRev函数,但有时使用EVALUATE在VBA中返回Excel工作表函数的结果是很方便的

Option Explicit


Public Sub test()


Debug.Print ContainsSubString("bc", "abc,d")


End Sub
Public Function ContainsSubString(ByVal substring As String, ByVal testString As String) As Boolean
'substring = string to test for; testString = string to search
ContainsSubString = Evaluate("=ISNUMBER(FIND(" & Chr$(34) & substring & Chr$(34) & ", " & Chr$(34) & testString & Chr$(34) & "))")


End Function