Excel VBA – 用通配符查找string
我试图查找包含通配符的string。 我需要findstring在特定行中的位置。 string全部采用“IP ## W ## XX”的forms,其中XX是我查找值的2个字母,##是可以是任意随机数的数字通配符。 因此这就是我查找string的样子:
FullLookUpString = "IP##W## " & LookUpString
我尝试使用Find
命令find这第一次发生的列,但我不断有错误。 这是我到目前为止,但它不起作用:如果任何人有一个简单的方法做。 相当新的VBA -.-
Dim GatewayColumn As Variant Dim GatewayDateColumn As Variant Dim FirstLookUpRange As Range Dim SecondLookUpRange As Range FullLookUpString = "IP##W## " & LookUpString Set FirstLookUpRange = wsMPNT.Range(wsMPNT.Cells(3, 26), wsMPNT.Cells(3, lcolumnMPNT)) Debug.Print FullLookUpString GatewayColumn = FirstLookUpRange.Find(What:=FullLookUpString, After:=Range("O3")).Column Debug.Print GatewayColumn
根据@SJR的评论,您可以通过两种方式来完成。 使用LIKE
的模式是:
IP##W## [AZ][AZ]
使用正则expression式,模式是:
IP\d{2}W\d{2} [AZ]{2}
示例代码:
Option Explicit Sub FindString() Dim ws As Worksheet Dim rngData As Range Dim rngCell As Range Set ws = ThisWorkbook.Worksheets("Sheet1") '<-- set your sheet Set rngData = ws.Range("A1:A4") ' with LIKE operator For Each rngCell In rngData If rngCell.Value Like "IP##W## [AZ][AZ]" Then Debug.Print rngCell.Address End If Next rngCell ' with regular expression Dim objRegex As Object Dim objMatch As Object Set objRegex = CreateObject("VBScript.RegExp") objRegex.Pattern = "IP\d{2}W\d{2} [AZ]{2}" For Each rngCell In rngData If objRegex.Test(rngCell.Value) Then Debug.Print rngCell.Address End If Next rngCell End Sub
如果我们可以假定行中的所有string都符合给定的模式,那么我们只能检查最后三个字符:
Sub FindAA() Dim rng As Range, r As Range, Gold As String Set rng = Range(Range("A1"), Cells(1, Columns.Count)) Gold = " AA" For Each r In rng If Right(r.Value, 3) = Gold Then MsgBox r.Address(0, 0) Exit Sub End If Next r End Sub
尝试这个:
If FullLookUpString Like "*IP##W##[a-zA-Z][a-zA-Z]*" Then MsgBox "Match is found" End If
它会发现你的模式(模式可以包围任何字符 – 这是*
允许的)。