2017-08-01 793 views
2

我試圖查找包含通配符的字符串。我需要找到字符串在特定行中的位置。該字符串全部採用「IP ## W ## XX」的形式,其中XX是我查找該值的兩個字母,##是可以是任意隨機數的數字通配符。因此,這是我的查找字符串看起來像:Excel VBA - 查找帶通配符的字符串

FullLookUpString = "IP##W## " & LookUpString 

我嘗試使用Find命令這第一次出現在那裏,但我一直在用錯誤的讓找列。以下是我目前爲止的內容,但不起作用:L如果任何人有簡單的方法。很新的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 
+0

我不認爲Find支持使用您需要的通配符。你也許應該看看Like運算符或正則表達式。 – SJR

回答

3

通過@SJR的評論,你可以做到這兩點。使用LIKE的模式是:

IP##W## [A-Z][A-Z] 

使用正則表達式的模式是:

IP\d{2}W\d{2} [A-Z]{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## [A-Z][A-Z]" 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} [A-Z]{2}" 
    For Each rngCell In rngData 
     If objRegex.Test(rngCell.Value) Then 
      Debug.Print rngCell.Address 
     End If 
    Next rngCell 

End Sub 
+0

我最終設法讓我的腦袋圍繞着myslef,我的解決方案與此類似,更適合我正在使用的電子表格,但非常感謝幫助我理解「Like」功能 – SBozhko

0

試試這個:

If FullLookUpString Like "*IP##W##[a-zA-Z][a-zA-Z]*" Then 
    MsgBox "Match is found" 
End If 

它會找到你的模式(模式可以任意字符包圍 - 這是由*允許)。

1

如果我們可以假設,在排比賽的所有字符串那麼我們只能檢查最後三個字符:

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 

enter image description here