2016-07-05 13 views
0

我有一大堆,我需要提取的電話號碼串,我怎麼設法從該字符串得到他們並粘貼在工作表中知道它們都具有格式 的(??)???? - ????在哪裏?是從0到9的隨機數,並且知道同一個字符串內可能有多個電話號碼?如何查找和複製字符串VBA中的特定文本?

例子:

"Acreaves Alimentos. Rodovia Do Pacifico, (68) 3546-4754 Br 317, Km 8, S/N - Zona Rura... Brasileia - AC | CEP: 69932-000. (68) 3546-5544. Enviar " 

將返回(68) 3546-4754 and (68) 3546-5544

+1

儘量使用正則表達式,老兄。 – duDE

+0

什麼正則表達式? – bingoball

+0

類似這樣:\([0-9] {2} \)[0-9] {4} - [0-9] {4} – Fabich

回答

2

我有一個代碼片段在這裏它設置爲您所指定的格式正則表達式和搜索字符串,然後提供它找到的每個實例的msgbox

您需要確保已添加(使用工具 - >參考)Microsoft VBScript Regular Expressions 5.5參考,否則最初將無法創建RegExp對象。

這種情況下的正則表達式模式被指定爲允許使用括號(在\中轉義,因爲否則它在正則表達式中有特殊含義),則兩個數字(每個數字可以是0-9)再次轉義),\s表示一個空格,後面是字符集0-9中的4位數字,短劃線(再次轉義)和0-9組中的最後四位數字。

不要忘記將regex Global屬性設置爲True,以便它返回所有匹配項。

sString = "Acreaves Alimentos. Rodovia Do Pacifico, (68) 3546-4754 Br 317, Km 8, S/N - Zona Rura... Brasileia - AC | CEP: 69932-000. (68) 3546-5544 . Enviar" 

Dim oReg : Set oReg = New RegExp 
oReg.Global = True 
oReg.Pattern = "\([0-9]{2}\)\s[0-9]{4}\-[0-9]{4}" 
Set Matches = oReg.Execute(sString) 
For Each oMatch In Matches 
    MsgBox oMatch.Value 
Next 

根據您的詳細信息和您提供的字符串,應根據您的要求進行操作。

+0

如何更改msgbox行來粘貼excel範圍/單元格? – bingoball

+0

而不是使用'MsgBox',您可以設置所需範圍的值,例如:Thisworkbook.worksheets(1).Range(「A1」)。Value = oMatch.Value'。您需要增加您爲每個匹配項目寫入的行,儘管... – Dave

0

如果格式實際上保持不變,在整個你可以嘗試這樣的事:

a = "Acreaves Alimentos. Rodovia Do Pacifico, (68) 3546-4754 Br 317, Km 8, S/N - Zona Rura... Brasileia - AC | CEP: 69932-000. (68) 3546-5544. Enviar " 
arrNums = Split(a, "(") 
For i = 1 To UBound(arrNums) 
    num = "(" & Left(arrNums(i), 13) 
Next 
0

該函數將返回一個包含數組號碼:

Function ReturnNumbers(s As String) As variant 

    Dim s As String, a As Variant, r As Variant, i As Integer 

    a = Split(s, "(") 

    ReDim r(1 To UBound(a, 1)) 

    For i = 1 To UBound(a, 1) 
     r(i) = "(" & Left(a(i), 13) 
    Next 

    ReturnNumbers = r 

End Function 
相關問題