2017-08-01 23 views
2

ワイルドカードを含む文字列を検索しようとしています。特定の行に文字列がどこにあるのかを調べる必要があります。文字列はすべて "IP ## W ## XX"の形を取る。ここでXXは値を参照する2文字で、##は任意の乱数である数字ワイルドカードである。Excel VBA - ワイルドカードで文字列を検索する

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

私はこの最初が発生したが、私はエラーになって続けるの列を見つけるために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 
+0

Findは、必要なワイルドカードの使用をサポートしていないと思います。おそらく、Like演算子や正規表現を参照する必要があります。 – SJR

答えて

3

@SJRのコメントごとに、これを2通り行うことができます。 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

私は最終的に私の頭の中で私の頭を得ることができた結局、私の解決策は私が一緒に働いているスプレッドシートに適してこれに似ていますが、 – SBozhko

0

これを試してみてください:

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

それは(パターンは任意の文字に囲まれてすることができます - *によって許可されています)あなたのパターンを見つけます。

1

我々が想定できた場合は、その行の試合ですべての文字列与えられたパターンの場合、最後の3文字だけを調べることができます:

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

関連する問題