在Excel中search另一个(有中断)的string

我试图检查主string是否包含整个子string,即使有中断。

例如:

  • 主串= 12ab34cd
  • substring = 1234d

应该返回一个积极的,因为1234d是完全包含在我的主要string,即使有额外的字符。

由于InStr不采用通配符,因此我使用mid函数编写了自己的VBA,如果在开始/结尾处有多余的字符,而在中间多​​余的字符则不会。

在上面的例子中,我写的函数

  • 如果主string是ab1234dc
  • 但如果是12ab34cd12ab34cd

有没有办法完成我想用VBA做什么?

注意下面的两种方法都区分大小写。 要使它们不区分大小写,可以使用Ucase (或Lcase )创build具有相同大小写的短语,也可以使用Option Compare Text语句的前缀。

虽然这可以用正则expression式来完成,但这里有一个使用MidInstr的方法

 Option Explicit Function ssFind(findStr, mainStr) As Boolean Dim I As Long, J As Long I = 1: J = 1 Do Until I > Len(findStr) J = InStr(J, mainStr, Mid(findStr, I, 1)) If J = 0 Then ssFind = False Exit Function End If I = I + 1: J = J + 1 Loop ssFind = True End Function 

其实,你可以使用Like进一步缩短代码:

 Option Explicit Function ssFind(findStr, mainStr) As Boolean Dim I As Long Dim S As String For I = 1 To Len(findStr) S = S & "*" & Mid(findStr, I, 1) Next I S = S & "*" ssFind = mainStr Like S End Function 

假设你有3列“SUBSTR”,“MAIN”和“CHECK”,你的“Substring”数据范围被命名为“SUBSTR”

 Sub check_char() Dim c As Range For Each c In Range("SUBSTR") a = 1 test = "" For i = 1 To Len(c.Offset(0, 1)) If Mid(c.Offset(0, 1), i, 1) = Mid(c, a, 1) Then test = test & Mid(c.Offset(0, 1), i, 1) a = a + 1 End If Next i If test = c Then c.Offset(0, 2) = "MATCH" Else c.Offset(0, 2) = "NO MATCH" End If Next 

结束小组