VBA

2016-03-28 25 views
0

Karakter biçimini temel alan bir dize içinde bir dize bulun. Çeşitli inStr yöntemlerini denediniz ama şansınız yok.VBA

Sorun aslında dayanan "1234567891" ayıklamak için gerektiğidir

Ben de "Metne [email protected] 2015/12/12 1234567891 PST" gibi bir şey içeren bir dize var öyle sayıları ve 10'u var, metinde kalıcı pozisyon yok, her seferinde her zaman farklı bir yerde olabilir.

Bunu yapmanın bir yolu var mı? Aramalarım, dizeyi "" ile bölmeme neden oldu, ancak sonucu almak için sayıyı "##########" biçimiyle nasıl karşılaştırdığımı anlayamıyorum.

+1

'ISNUMERIC()' ve 'Len() = 10' –

+1

kullanmayı deneyin. [0-9] (10) gibi bir deseni olan bir VBA UDF ve [regex] kullanın. – Jeeped

cevap

4

düşünün: benim yorum bir ek sözleşme olarak

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

Teşekkürler, bu hile yapmalı! Len'i düşünmemiştim, hoş olanı. – 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 

Not uzunluğu parantezler değil parantez Başlangıçta belirtildiği gibi tarafından çevrelenmiş olması.

+1

Yayınlananlar göz önüne alındığında, regex'in etrafında kelime sınırlama belirteçleri ekleyeceğim. –