2016-03-28 58 views
0

有一个问题,我似乎无法击败。已经尝试过各种inStr方法等,但没有运气。VBA在基于字符格式的字符串中查找字符串

所以我有一个包含一些像“texttext [email protected] 2015年12月12日1234567891 PST”的字符串

的问题是,我需要提取基于这样的事实了“1234567891”,它是数字,其中有10个,在文本中没有永久位置,每次都可以在不同的位置。

有没有办法做到这一点?我的搜索导致我将字符串拆分为“”,但我无法弄清楚如何将数字与“##########”格式进行比较以获得结果。

+1

尝试使用'ISNUMERIC()'和'Len()= 10' –

+1

使用类似[0-9](10)的模式的VBA UDF和[regex]。 – Jeeped

回答

4

考虑:

Sub whatever() 
    s = "texttext [email protected] 12/12/2015 1234567891 PST" 
    ary = Split(s, " ") 
    For Each a In ary 
     If IsNumeric(a) And Len(a) = 10 Then MsgBox a 
    Next a 
End Sub 
+0

谢谢,这应该是个诀窍!没有想到Len,很好。 – user2446928

2

作为附录我的评论,

Function tenDigits(str As String) 
    Static rgx As Object 

    If rgx Is Nothing Then 
     Set rgx = CreateObject("VBScript.RegExp") 
    End If 

    With rgx 
     .Global = False 
     .Pattern = "[0-9]{10}" 
     If .Test(str) Then tenDigits = .Execute(str)(0) 
    End With 

End Function 

注意,长度由括号,不括号因为我原来规定封闭。

+1

鉴于已发布的内容,我会在正则表达式的周围添加字边界标记'\ b'。 –