返回列表 上一主題 發帖

[發問] 如何修正 Or 的陳述不符合型態

本帖最後由 quickfixer 於 2022-11-3 03:24 編輯

回復 1# Andy2483

用regexp好像比較方便,速度還快一些

    Sub test()
    Dim Find_Num, reg As Object, brr, crr, i&, j&, s As Double, runtime As Double
    runtime = Timer
    Application.ScreenUpdating = False
    brr = Range([操作表!B2], [操作表!B65536].End(3))
    Set reg = CreateObject("VBScript.RegExp")
    reg.Pattern = "\d+"
    reg.Global = True
    ReDim crr(1 To UBound(brr), 0)
    For i = 1 To UBound(brr)
        s = 0
        Set Find_Num = reg.Execute(brr(i, 1))
        If Find_Num.Count > 0 Then
            For j = 0 To Find_Num.Count - 1
                s = s + Find_Num(j)
            Next j
        End If
        crr(i, 0) = s
    Next i
    Range("d2").Resize(UBound(brr), 1) = crr
    Application.ScreenUpdating = True
    Debug.Print Timer - runtime
    Set reg = Nothing
End Sub

TOP

回復 2# quickfixer


    多用了一個變數,修正如下
Sub test()
    Dim Find_Num, reg As Object, brr, crr, i&, j&, runtime As Double
    runtime = Timer
    Application.ScreenUpdating = False
    brr = Range([操作表!B2], [操作表!B65536].End(3))
    Set reg = CreateObject("VBScript.RegExp")
    reg.Pattern = "\d+"
    reg.Global = True
    ReDim crr(1 To UBound(brr), 0)
    For i = 1 To UBound(brr)
        Set Find_Num = reg.Execute(brr(i, 1))
        If Find_Num.Count > 0 Then
            For j = 0 To Find_Num.Count - 1
                crr(i, 0) = crr(i, 0) + Val(Find_Num(j))
            Next j
        End If
    Next i
    Range("d2").Resize(UBound(brr), 1) = crr
    Application.ScreenUpdating = True
    Debug.Print Timer - runtime
    Set reg = Nothing
End Sub

TOP

        靜思自在 : 人的眼睛長在前面,只看到別人的缺點,絲毫看不到自己的缺點。
返回列表 上一主題