在Excel上搜索另一个(带有中断)的字符串

时间:2017-12-11 20:57:57

标签: excel vba excel-vba

我正在尝试检查主字符串是否包含整个子字符串,即使存在中断。

例如:

  • 主要字符串= 12ab34cd
  • substring = 1234d

应该返回一个正数,因为1234d完全包含在我的主字符串中,即使有额外的字符。

由于InStr没有使用通配符,我使用mid函数编写了自己的VBA,如果在开头/结尾有额外的字符,但是在中间。

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

    如果主字符串为ab1234dc,,则
  • 有效
  • 但不是12ab34cd

有没有办法完成我尝试使用VBA做的事情?

2 个答案:

答案 0 :(得分:1)

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

虽然可以使用正则表达式来完成,但这是使用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

答案 1 :(得分:0)

假设您有3列" SUBSTR"," MAIN"和"检查"和你的"子串"数据范围命名为" 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

End Sub