在Excel中search另一个(有中断)的string
我试图检查主string是否包含整个子string,即使有中断。
例如:
- 主串=
12ab34cd
, - substring =
1234d
应该返回一个积极的,因为1234d
是完全包含在我的主要string,即使有额外的字符。
由于InStr
不采用通配符,因此我使用mid
函数编写了自己的VBA,如果在开始/结尾处有多余的字符,而在中间多余的字符则不会。
在上面的例子中,我写的函数
- 如果主string是
ab1234dc
, - 但如果是
12ab34cd
则12ab34cd
有没有办法完成我想用VBA做什么?
注意下面的两种方法都区分大小写。 要使它们不区分大小写,可以使用Ucase
(或Lcase
)创build具有相同大小写的短语,也可以使用Option Compare Text
语句的前缀。
虽然这可以用正则expression式来完成,但这里有一个使用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
假设你有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
结束小组