2014-04-17 87 views
0

我在Excel中工作,需要VBA代碼來提取3個特定數字模式。在A列中,我有幾行字符串,包括字母,數字和標點符號。我需要刪除除13位數字(僅包含數字),10位數字(僅包含數字)或9位數字後面緊跟「x」字符的所有字符。這些是伊斯蘭數字。用於提取3個特定數字模式的VBA代碼

其餘字符應該用一個空格分隔,而且只能用一個空格分隔。因此,對於A1中的以下字符串:「這裏有幾本書,包括0192145789和9781245687456.另外,還包含了包含isbn 045789541x的書,這本書是1億本。」

輸出應該是:0192145789 9781245687456 045789541x

注意,100000000不應該被包含在輸出,因爲它不符合任何上述三種模式。

我不反對excel公式解決方案,而不是VBA,但我認爲VBA會更乾淨。提前致謝。

+0

分割字符串使用空格作爲分隔符使用它作爲一個公式,然後串聯只以數字開頭的段。 –

+0

如果你想要正則表達式,請看看[post](http://stackoverflow.com/q/22542834/2521004),它概述了在VBA中使用正則表達式的幾種方法。 –

回答

2

這裏是一個VBA函數,將做明確你指定什麼

Function ExtractNumbers(inputStr As String) As String 

    Dim outputStr As String 
    Dim bNumDetected As Boolean 
    Dim numCount As Integer 
    Dim numStart As Integer 

    numCount = 0 
    bNumDetected = False 

    For i = 1 To Len(inputStr) 
     If IsNumeric(Mid(inputStr, i, 1)) Then 
      numCount = numCount + 1 
      If Not bNumDetected Then 
       bNumDetected = True 
       bNumStart = i 
      End If 

      If (numCount = 9 And Mid(inputStr, i + 1, 1) = "x") Or _ 
       numCount = 13 And Not IsNumeric(Mid(inputStr, i + 1, 1)) Or _ 
       numCount = 10 And Not IsNumeric(Mid(inputStr, i + 1, 1)) Then 

        If numCount = 9 Then 
         outputStr = outputStr & Mid(inputStr, bNumStart, numCount) & "x " 
        Else 
         outputStr = outputStr & Mid(inputStr, bNumStart, numCount) & " " 
        End If 

      End If 
     Else 
      numCount = 0 
      bNumDetected = False 
     End If 

    Next i 

    ExtractNumbers = Trim(outputStr) 

End Function 

沒什麼特別的,只是使用通過您的字符串的一個字符,雲字符串函數在一個時間尋找結束的9位數字的部分與x,10位數字和13位數字並且提取他們入一個新的字符串。

這是一個UDF這樣你就可以在你的工作簿

+0

很棒 - 非常感謝! – enstmagoo

相關問題