我正在尝试检查主字符串是否包含整个子字符串,即使存在中断。
例如:
12ab34cd
,1234d
应该返回一个正数,因为1234d
完全包含在我的主字符串中,即使有额外的字符。
由于InStr
没有使用通配符,我使用mid
函数编写了自己的VBA,如果在开头/结尾有额外的字符,但是在中间。
在上面的例子中,我写的函数
ab1234dc
,,则12ab34cd
。 有没有办法完成我尝试使用VBA做的事情?
答案 0 :(得分:1)
注意以下两种方法都区分大小写。要使它们不区分大小写,您可以使用Ucase
(或Lcase
)创建具有相同大小写的短语,也可以使用Option Compare Text
语句为例程添加前缀。
虽然可以使用正则表达式来完成,但这是使用Mid
和Instr
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