更正:
Dim str As String
str = "12 34 45 56 67 78 122 -123"
Debug.Print GetNumder(str, 3)
Function GetNumder(ByVal Text As String, ByVal Index As Long) As Long
Dim str1 As String, str2 As String
Dim ascX As Integer, i As Long
Dim str() As String
str1 = Text
For i = 1 To Len(str1)
str2 = Mid(str1, i, 1)
ascX = Asc(str2)
If ascX > 59 Or ascX < 48 Then
str1 = Replace(str1, str2, Space(1))
End If
Next
Do While InStr(1, str1, Space(2))
str1 = Replace(str1, Space(2), Space(1))
Loop
Dim str As String
str = "12 34 45 56 67 78 122 -123"
Debug.Print GetNumder(str, 3)
Function GetNumder(ByVal Text As String, ByVal Index As Long) As Long
Dim str1 As String, str2 As String
Dim ascX As Integer, i As Long
Dim str() As String
str1 = Text
For i = 1 To Len(str1)
str2 = Mid(str1, i, 1)
ascX = Asc(str2)
If ascX > 97 Or ascX < 48 Then
str1 = Replace(str1, str2, Space(1))
End If
Next
Do While InStr(1, str1, Space(2))
str1 = Replace(str1, Space(2), Space(1))
Loop
Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Dim str As String
Function GetNumber(ByVal Text As String, ByVal Index As Long) As Long
Dim i As Integer
Dim j As Integer
Dim str_Temp As String * 1
Dim Str_Text As String
Dim str_Arr() As String
Dim str_Arr1() As String
Str_Text = vbNullString
For i = 1 To Len(Text)
str_Temp = Mid(Text, i, 1)
If Asc(str_Temp) < 48 Or Asc(str_Temp) > 57 Then
Str_Text = Str_Text & ","
Else
Str_Text = Str_Text & str_Temp
End If
Next
str_Arr = Split(Str_Text, ",")
For i = 0 To UBound(str_Arr)
If IsNumeric(str_Arr(i)) = True Then
ReDim Preserve str_Arr1(j) As String
str_Arr1(j) = str_Arr(i)
j = j + 1
End If
Next
If Index <= UBound(str_Arr1) + 1 And Index > 0 Then
GetNumber = str_Arr1(Index - 1)
Else
GetNumber = vbNullString
End If
End Function
Private Sub Command1_Click()
Dim lng_Loop As Long
Dim lng_Start As Long
Dim lng_End As Long
lng_Start = timeGetTime
For lng_Loop = 1 To 500
Call GetNumber(str, 3)
Next
lng_End = timeGetTime
Debug.Print lng_End - lng_Start
End Sub
Private Sub Form_Load()
str = "12 34 45 56 67 78 122 -123"
End Sub
看我这样的方法可以不? 效率问题如何?
Option Explicit
Dim str As String
Function GetNumber(ByVal Text As String, ByVal Index As Long) As Long
Dim i As Integer
Dim j As Integer
Dim str_Temp As String * 1
Dim Str_Text As String
Dim str_Arr() As String
Dim str_Arr1() As String
Str_Text = vbNullString
For i = 1 To Len(Text)
str_Temp = Mid(Text, i, 1)
If Asc(str_Temp) < 48 Or Asc(str_Temp) > 57 Then
Str_Text = Str_Text & ","
Else
Str_Text = Str_Text & str_Temp
End If
Next
str_Arr = Split(Str_Text, ",")
'下面也可以使用数组移位来达到删除非数字元素
'***********************************************************************
For i = 0 To UBound(str_Arr)
If IsNumeric(str_Arr(i)) = True Then
ReDim Preserve str_Arr1(j) As String
str_Arr1(j) = str_Arr(i)
j = j + 1
End If
Next
**************************************************************************
If Index <= UBound(str_Arr1) + 1 And Index > 0 Then
GetNumber = str_Arr1(Index - 1)
Else
GetNumber = vbNullString
End If
End Function
Private Sub Form_Load()
str = "12 34 45 56 67 78 122 -123"
Debug.Print GetNumber(str, 3)
End Sub