如何从string中find数字?

我需要从stringfind数字。 如何从VBA Excel中的string中查找数字?

假设你的意思是你想要非数字被删除,你应该能够使用类似于:

 Function onlyDigits(s As String) As String ' Variables needed (remember to use "option explicit"). ' Dim retval As String ' This is the return string. ' Dim i As Integer ' Counter for character position. ' ' Initialise return string to empty ' retval = "" ' For every character in input string, copy digits to ' ' return string. ' For i = 1 To Len(s) If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then retval = retval + Mid(s, i, 1) End If Next ' Then return the return string. ' onlyDigits = retval End Function 

调用这个:

 Dim myStr as String myStr = onlyDigits ("3d1fgd4g1dg5d9gdg") MsgBox (myStr) 

会给你一个对话框,其中包含:

 314159 

前两行显示了如何将它存储到一个任意的stringvariables中,如你所愿。

构build正则expression式来parsing。 虽然语法可能需要一段时间才能find这种方法是非常有效的,并且处理更复杂的string提取/replace非常灵活

 Sub Tester() MsgBox CleanString("3d1fgd4g1dg5d9gdg") End Sub Function CleanString(strIn As String) As String Dim objRegex Set objRegex = CreateObject("vbscript.regexp") With objRegex .Global = True .Pattern = "[^\d]+" CleanString = .Replace(strIn, vbNullString) End With End Function 

扩展brettdj的答案,为了parsing不相交的embedded数字到不同的数字:

 Sub TestNumList() Dim NumList As Variant 'Array NumList = GetNums("34d1fgd43g1 dg5d999gdg2076") Dim i As Integer For i = LBound(NumList) To UBound(NumList) MsgBox i + 1 & ": " & NumList(i) Next i End Sub Function GetNums(ByVal strIn As String) As Variant 'Array of numeric strings Dim RegExpObj As Object Dim NumStr As String Set RegExpObj = CreateObject("vbscript.regexp") With RegExpObj .Global = True .Pattern = "[^\d]+" NumStr = .Replace(strIn, " ") End With GetNums = Split(Trim(NumStr), " ") End Function