在Excel /宏中将字符串转换为双精度

Pet*_*vic 1 excel vba excel-vba

我尝试在Excel中创建新函数,将计算给定的值(类似于SUM函数,但只有给定的前缀).

  A
---------    
1|AA30  
2|AA10 
3|BC446 
4|AA10

// result will be 50  on SUM_PREFIX(A1:A4;"AA")
Run Code Online (Sandbox Code Playgroud)

问题是,当值为例如AA10,434或AA4.43时.我可以帮我解决问题吗?这是我在VB中的第一个stript.

 Function SUM_PREFIX(Data As Range, prefix As String) As Double

    Dim result As Double
    Dim strVal As String
    Dim i As Integer
    Dim objRegExp As Object

   Set objRegExp = CreateObject("vbscript.regexp")
   With objRegExp
        .IgnoreCase = True
        .MultiLine = False
        .Pattern = "^[" + prefix + "]+[0-9]+(\,|\.)?[0-9]?$"
        .Global = True
    End With

    For i = 1 To Data.Rows.Count
        Debug.Print Data.Cells(i, 1)
        If objRegExp.Test(Data.Cells(i, 1)) = True Then
            strVal = Replace(Data.Cells(i, 1), prefix, "")
            Debug.Print strVal
            strVal = Trim(Replace(strVal, ",", "."))
            Debug.Print strVal
            result = result + CDbl(strVal)
        End If
    Next i

    SUM_PREFIX = result
End Function
Run Code Online (Sandbox Code Playgroud)

感谢帮助.

ssa*_*ndo 10

CDbl是区域设置感知的,所以检查你的Replace是否正确(例如,在我的语言环境中,我必须用","代替"."才能使它工作).如果您不想依赖于区域设置感知代码,请使用Val而不是CDbl因为Val只识别"." 无论区域设置如何,都是有效的小数分隔符.