2017-08-17 150 views
2

我能寫一個找出字符串中的6位數字的代碼,並將其複製到下一列,但我想補充的搜索也可以找到與模式##-####和拷貝數它進入下一欄,下面的例子:VBA Excel在字符串中尋找數字模式

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個數字,然後再一個單詞邊界。所以,它匹配123456text 123456 here。要匹配12-3456,您可以將模式分成2位和4位子模式,並插入可選的-模式-?

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

參見regex demo

-?的比賽1個或0連字符和\d{2}\d{4}將匹配所有在所有字之間的邊界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)。 –