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 

它会发现你的模式(模式可以包围任何字符 – 这是*允许的)。