在 VBA 中检查一个字符串是否包含一个子字符串

Glen Alfaro 2023年1月30日 2022年5月18日
  1. 使用 Instr() 函数检查主字符串是否包含子字符串
  2. 使用 InstrRev() 函数检查主字符串是否包含子字符串
  3. 使用 Like 运算符检查主字符串是否包含子字符串
在 VBA 中检查一个字符串是否包含一个子字符串

本文将演示使用 Instr() 函数、InstrRev() 函数和 Like 函数来检查主字符串是否包含子字符串。

使用 Instr() 函数检查主字符串是否包含子字符串

Instr() 函数语法:

InStr([ start ], string1, string2, [ compare ])

返回类型:整数

参数:

[ start ] 可选的。搜索将开始的数值。
对于 [ start ] 参数,以下是相应的值:
1 - [默认] 搜索将从主字符串的开头开始< br/> n - 搜索将从 n 位置开始。
string1 强制的。要搜索的字符串(主字符串)
string2 强制的。要查找的字符串。
[ compare ] 可选的。指示将使用哪种字符串比较方法。
对于 [ compare ] 参数,以下是相应的值:
0 - [默认] 二进制比较方法(区分大小写)
1 - 文本比较方法(不区分大小写)

下面的代码块将使用 Instr() 函数检查子字符串是否在 VBA 的主字符串中。

Function IsSubstring(pos as Integer, mainStr as String, subStr as String,compTyp as Integer) as boolean
    'if `Instr()` function returned 0 then the substring is not present in the main string.
    'If `Instr()` function returned a value greater than `0`, would mean that the substring is in the main string.
    If Instr(pos,mainStr,subStr,compTyp) >0 Then
        IsSubstring = true
        Else: IsSubstring = false
    End if
End Function
Sub test1()
    Debug.print IsSubstring(1,"ABCDE","C",1)
End Sub
Sub test2()
    Debug.print IsSubstring(1,"ABCDE","F",1)
End Sub
Sub test3()
    Debug.print IsSubstring(1,"ABCDE","c",0)
End Sub

输出 test1

True

输出 test2

False

输出 test3

False

下面的代码块将使用 Instr() 函数从主字符串返回子字符串的位置。

Function GetPosition(pos as Integer, mainStr as String, subStr as String,compTyp as Integer)
    'Check first if the substring is in the main string.
     If InStr(pos, mainStr, subStr, compTyp) > 0 Then
        'if substring is in the main string then get the position of the substring in the main string.
       GetPosition = InStr(1, mainStr, subStr, 1)
       Else: GetPosition = ("Subtring is not in the main string.")
   End If
End Function
Sub test1()
    'Check if `C` is in `ABCDE` starting at the first letter (A), case insensitive.
    Debug.Print GetPosition(1,"ABCDE", "C",1)
End Sub
Sub test2()
    'Check if `c` is in `ABCDE` starting at the first letter of the main string, case sensitive.
    Debug.Print GetPosition(1,"ABCDE", "c",0)
End Sub
Sub test3()
    'Check if `c` is in `ABCDE` starting at the fourth letter of the main string, case sensitive.
    Debug.Print GetPosition(4,"ABCDE", "c",0)
End Sub

输出 test1

3

输出 test2

Subtring is not in the main string.

输出 test3

Subtring is not in the main string.

使用 InstrRev() 函数检查主字符串是否包含子字符串

InstrRev() 函数语法:

InStrRev(string1, string2,[ start ], [ compare ])

返回类型:整数

参数:

string1 强制的。要搜索的字符串(主字符串)
string2 强制的。要查找的字符串。

下面的代码块将使用 InstrRev() 函数检查子字符串是否在 VBA 的主字符串中。

Function IsSubstring(mainStr As String, subStr As String) As Boolean
    'if `InstrRev()` function returned 0 then the substring is not present in the main string.
    'If `InstrRev()` function returned a value greater than `0`, would mean that the substring is in the main string.
    If InStrRev(mainStr, subStr) > 0 Then
        IsSubstring = True
        Else: IsSubstring = False
    End If
End Function
Sub test1()
    Debug.Print IsSubstring("ABCDE", "C")
End Sub
Sub test2()
    Debug.Print IsSubstring("ABCDE", "F")
End Sub

输出 test1

True

输出 test2

False

使用 Like 运算符检查主字符串是否包含子字符串

Like 运算符语法:

res = string Like pattern

返回类型:布尔值

参数:

res 强制的。布尔返回值
string 强制的。要查看的字符串
pattern 强制的。要查找的字符串。更多详情见备注

备注:

? 任何单个字符
* 任意 0 到多个字符
# 任何单个数字(0 到 9)

下面的代码块将使用 Like 运算符检查子字符串是否在 VBA 的主字符串中

Function IsSubString(mainStr as String,subStr as String) as Boolean
    'Check if subStr is in the main string by using *
   If mainStr Like "*" & subStr & "*" Then
        IsSubString = True
        Else: IsSubstring= False
   End If
End Function
Sub test1()
    Debug.print (IsSubString("ABCDE","C"))
End Sub
Sub test2()
    Debug.print (IsSubString("ABCDE","c"))
End Sub
Sub test3()
    Debug.print (IsSubString("ABCDE","F"))
End Sub

输出 test1

True

输出 test2

False

输出 test3

False

相关文章 - VBA String