2017-05-17 7 views
-2

列Aにおいて、Iは 正規表現&VBA - 細胞をループは、隣接セルで一致値を返す

A0394

948B0129

Zkjs333

0a0401aような値を有していた場合

09ab28

と私は B(カスタム関数を使用せずに)正規表現とVBAを使用して2桁の数字が続く2アルファがあるマッチを返したかった

js33

ab28

何だろうコードのように見える?

+0

初めて試してみてはいかがですか?何か試しましたか? –

+0

私は正しく動作していなかったので、私はそれを投げ捨てました。私は前にvbaでregexpを使ったことはありません。ここで私は 'サブテスト()オブジェクトとして 薄暗いstrPattern文字列として 薄暗い正規表現、文字列 セットの正規表現= CREATEOBJECT(「VBScript.RegExp」)としてstrの正規表現と .pattern =」を持っていたものの線に沿って何か[A1:A4] と一致するものは と一致します。 thing.offset(az){2} [0-9] {2} " .global = true (0,1)= regex.execute(物) next' – machump

答えて

0

あなたはほとんどそれを持っていました。あなたはパターンの1つのオカレンスだけを検索しているので、最初のパターンはmatches(0)となりますが、最初にmatches.countを使って一致するものがあるかどうかを確認してください。

Sub Test() 
    Dim cel As Range, matches As Object 
    With CreateObject("VBScript.RegExp") 
    .Global = True 
    .Pattern = "[a-zA-Z]{2}[0-9]{2}" 
    For Each cel In Range("A1:A10") 
     Set matches = .Execute(cel.Value2) 
     If matches.Count > 0 Then cel.Offset(0, 1).Value = matches(0) 
    Next 
    End With 
End Sub 
0

あなた正規表現は正確であるとこのようなものは、あなたがもし文字列が一致するかを確認することができます

regEx.Test(strInput) 

でVBA

Private Sub simpleRegex() 
    Dim strPattern As String: strPattern = "[a-z]{2}[0-9]{2}"  
    Dim regEx As New RegExp  


     With regEx 
      .Global = True 
      .MultiLine = True 
      .IgnoreCase = False 
      .Pattern = strPattern 
     End With 

にそれを適切に定義する必要があります。

非常に深い回答hereが見つかります。

+0

非常に深い答えの例3(範囲をループする)のコードを使用して:あなたはif文で何を書いていますか(regex.test )一致するものの値を返しますか?私はmsgbox(regex.execute(strinput))を試しましたが、エラーを返します: "間違った数の引数または無効なプロパティの割り当て" – machump

+0

regex.execute(strinput)は、可能なすべての一致を返します。 'msgbox(regex.execute strinput))あなたはあまりにも多くの引数を設定しています。 @machump –

0
Sub test() 

    Dim matches, regex As Object, c As Range 
    Dim i As Long 

    Set regex = CreateObject("VBScript.RegExp") 
    With regex 
     .Pattern = "[a-z]{2}[0-9]{2}" 
     .Global = True 
    End With 

    For Each c In Range("A1:A4") 
     Set matches = regex.Execute(c.Value) 

     'if only one match expected... 
     If matches.Count > 0 Then 
      c.Offset(0, 1) = matches(0) 
     End If 

     'if can be multiple matches... 
     'For i = 1 To matches.Count 
     ' c.Offset(0, i) = matches(i - 1) 
     'Next i 
    Next 

End Sub