2017-08-17 5 views
2

文字列内に6桁の数字を見つけて次の列にコピーするコードを書くことができましたが、パターンを持つ数字を見つける検索を追加したいと考えています##-####とコピーそれは次の列、下の例に:文字列内の数字パターンを見つけるためにVBAが優れています

Example

誰かが私を助けることができますか?

Sub Pull_6_Digit_Numbers_From_String() 


    Dim r As Range, i As Long 
    With CreateObject("VBScript.RegExp") 
     .Global = True 
     .Pattern = "\b\d{6}\b" 
     For Each r In Range("A1", Range("A" & Rows.Count).End(xlUp)) 
      If .test(r.Value) Then 
       For i = 0 To .Execute(r.Value).Count - 1 
        r(, i + 2).Value = .Execute(r.Value)(i) 
       Next 
      End If 
     Next 
    End With 
+0

現在のパターンを拡張したいのですか? '\ b \ d {2} - ?\ d {4} \ b'を試してください –

+0

パターンがうまくいかないですか? – SJR

答えて

3

あなたの現在のパターン、\b\d{6}\b、再びそれから6つの連続した数字と単語の境界、ワード境界に一致します。したがって、text 123456 hereには123456が一致します。 12-3456も一致させるには、パターンを2桁と4桁のサブパターンに分割し、オプションの-パターン-?を挿入することができます。

\b\d{2}-?\d{4}\b 

regex demo

-?マッチ1または0ハイフンを参照してください、そして\d{4}\d{2}はすべて、すべてのワード境界間の6桁の数字と一致します。

+0

それを持って、明快で透明な説明のためにWiktorをありがとう! – FotoDJ

+0

Wiktor、そこには大文字のNで始まるテキストを引っ張る方法があります。それは3〜6文字または数字の組み合わせです。 N24またはNX747またはN35655Vを無視する必要がありますが、N2またはN8(Nプラス1文字)またはN1234567(Nプラス6文字以上)を無視する必要がありますか? – FotoDJ

+0

@FotoDJ:['\ bN [^ \ W _] {3,6 } \ b'](https://regex101.com/r/BWNSXg/2)または['\ bN [^ \ W_] {2,6} \ b'](https://regex101.com/r/) BWNSXg/3)。 –