String VBA基于字符格式在字符串中查找字符串

String VBA基于字符格式在字符串中查找字符串,string,excel,vba,String,Excel,Vba,我有一个我似乎无法克服的问题。尝试过各种仪器方法等,但运气不佳 所以我有一个字符串,它包含类似“texttext”的内容email@email.com2015年12月12日1234567891太平洋标准时间” 问题是,我需要提取“1234567891”,因为它是数字,有10个数字,文本中没有固定位置,每次都可以在不同的位置 有办法做到这一点吗?我的搜索结果是用“”分隔字符串,但我不知道如何将数字与“########”格式进行比较以获得结果。考虑: Sub whatever() s = "

我有一个我似乎无法克服的问题。尝试过各种仪器方法等,但运气不佳

所以我有一个字符串,它包含类似“texttext”的内容email@email.com2015年12月12日1234567891太平洋标准时间”

问题是,我需要提取“1234567891”,因为它是数字,有10个数字,文本中没有固定位置,每次都可以在不同的位置

有办法做到这一点吗?我的搜索结果是用“”分隔字符串,但我不知道如何将数字与“########”格式进行比较以获得结果。

考虑:

Sub whatever()
    s = "texttext email@email.com 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
考虑:

Sub whatever()
    s = "texttext email@email.com 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

作为我评论的补充

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

请注意,长度是用大括号括起来的,而不是我最初所说的括号。

作为我评论的附录

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

请注意,长度是用大括号括起来的,而不是像我最初说的那样用括号括起来。

尝试使用
ISNUMERIC()
Len()=10
使用VBA UDF和[regex],使用类似[0-9](10)的模式。尝试使用
ISNUMERIC()
Len()=10
使用VBA UDF和[regex],模式类似[0-9](10).谢谢你,这应该能奏效!没想到这个镜头,不错的。谢谢你,这个应该可以!没有想到Len,很好的一个。考虑到已经发布的内容,我会在regex周围添加单词边界标记
\b
。考虑到已经发布的内容,我会在regex周围添加单词边界标记
\b