用VBA提取字符串中的數字


上一篇講了用 python 提取字符串中的數字,這次用VBA來實現。總體思路和 python 是一樣的,代碼如下:


Option Explicit

Sub GetNumbers()
    
    Dim from_string As String, convert_numbers As String
    Dim i, j, k, m, first_number_location
    Dim i1 As String
    Dim check_start(9) As String, check_end(10) As String
    Dim split_string() As String, get_numbers() As String
    
    ' 給 from_string 賦值
    from_string = Cells(1, 1)
    from_string = CStr(from_string)
    
    ' 先求出 check_start 和 check_end
    ' 用於后續檢驗 from_string 中每個字符是否是數字
    For i = 0 To 9
        i1 = CStr(i)
        check_start(i) = i1
        check_end(i) = i1
    Next i
    
    check_end(10) = "."
    
    ' 將 from_string 拆分,每個字符都存到 split_string 中
    ReDim split_string(Len(from_string) - 1)
    For i = 1 To Len(from_string)
        split_string(i - 1) = Mid(from_string, i, 1)
    Next i
    
    
    ' 先求出 split_string 中第一個數字及其位置
    For i = LBound(split_string()) To UBound(split_string())
        For j = LBound(check_start()) To UBound(check_start())
            If split_string(i) = check_start(j) Then
                ReDim get_numbers(UBound(split_string) - i)
                get_numbers(0) = split_string(i)
                first_number_location = i
                GoTo GetFirstNumberAlready
            End If
        Next j
    Next i
    
GetFirstNumberAlready:
    m = 1
    
    ' 從第一個數字開始,求出之后緊連的每個數字,包括小數點
    For j = first_number_location + 1 To UBound(split_string())
        For k = LBound(check_end()) To UBound(check_end())
            If split_string(j) = check_end(k) Then
                get_numbers(m) = split_string(j)
                m = m + 1
            End If
        Next k
    Next j
    
    ' 把 get_numbers() 輸出
    For j = LBound(get_numbers()) To UBound(get_numbers())
        convert_numbers = convert_numbers & get_numbers(j)
    Next j
    
    MsgBox convert_numbers
    
End Sub


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM