2012-12-13 114 views
0

我在excel中的字符串可以是任何像213221-sddc或232323/scdscsd或數字和字符之間的任何分隔符......我怎樣才能從這個文本中提取數字?如何從字母數字文本中提取數字?

+0

,因爲我的手比較癢我寫了一個代碼參照我從評論中提到的功能。所以沒有交叉發佈。但要讓您瞭解如何讀取Excel單元格範圍以處理文本然後輸出。希望讓你去;) – bonCodigo

+1

當你可以使用正則表達式時,不需要太多的代碼 – InContext

+1

如果你的數字總是在字符串的前面,那麼正則表達式是矯枉過正的。 – brettdj

回答

2

這僅僅是一個開始,你可以從一系列閱讀你的所有字母數字文字(根據圖像),然後使用ABOVE MENTIONED FUNCTION From Dave and Richie

Option Explicit 

Sub TestRange() 
Dim numberArray As Variant 
Dim i As Integer 
Dim strTemp As String 

    numberArray = Application.Transpose(Sheets(1).Range("B4:B11")) 

    For i = LBound(numberArray) To UBound(numberArray) 
     strTemp = numberArray(i) 
     numberArray(i) = ExtractNumber(strTemp) '-- **You use above mentioned function** 
    Next i 

'Output the processed array into the Sheet. 
Sheets(1).Range("C4").Resize(UBound(numberArray), _ 
LBound(numberArray)) = Application.Transpose(numberArray) 

End Sub 

輸出:

enter image description here

5

使用正則表達式。我已經將strNoAlpha作爲Double加入,但如果需要,這也可以是一個字符串。

Dim str As String, strNoAlpha As Double 

str = "213221-sddc" 
With CreateObject("vbscript.regexp") 
    .Pattern = "[^\d]+" 
    .Global = True 
    strNoAlpha = Trim(.Replace(str, vbNullString)) 
End With 

或者作爲UDF:

Function removeAlpha(rng As Range) As Double 

    If (rng.Count <> 1) Then 
     removeAlpha = "Only select one cell" 
     Exit Function 
    End If 

    Dim str As String 

    str = rng.Value2 

    With CreateObject("vbscript.regexp") 
     .Pattern = "[^\d]+" 
     .Global = True 
     removeAlpha = Trim(.Replace(str, vbNullString)) 
    End With 

End Function 
+1

+ 1用於RegEx。你可能也想使用'Trim(strNoAlpha)'去除空格? –

+0

空格被\ d刪除,只返回數字,但通常是一種很好的技術。 – InContext

+0

'strNoAlpha = .Replace(str,vbNullString)'不會刪除空格...試試這個'Debug.Print Len(Trim(strNoAlpha))'和'Debug.Print Len(strNoAlpha)'第一個會給你6,第二個會給你8 ... –