You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对FormatCurrency()函数格式化后的货币值进行求和?

问题原因说明

Val函数的解析逻辑为从字符串首字符开始读取数字,遇到第一个非数字字符就直接停止解析,因此FormatCurrency输出的带前置货币符号、千位分隔符的字符串会被Val直接判定为非数字开头,返回结果为0。

解决方案

方案1:使用原始数值计算(最推荐)

你在给控件Caption赋值时本身就持有firstSales、secondSales两个原始数值,直接用原始值计算即可,完全不需要读取格式化后的控件内容做转换,从根源避免转换错误。
代码示例:

' 原始数值直接求和后,格式化显示为总销售额
Me.totalSales.Caption = FormatCurrency(Val(firstSales) + Val(secondSales))

方案2:格式化字符串转数值(仅当无法获取原始数值时使用)

如果确实只能拿到已经格式化好的货币字符串,可以用两种方法转换:

  • 使用VBA内置的CCur(转货币类型)或CDbl(转双精度数值类型)函数,这两个函数可识别系统区域设置对应的货币符号、千位分隔符,兼容性远高于Val:
Me.totalSales.Caption = FormatCurrency(CCur(Me.firstDaySales.Caption) + CCur(Me.secondDaySales.Caption))
  • 如果遇到区域不匹配的特殊场景,可以先清理字符串内的非数值字符再转换:
Function 货币字符串转数值(货币Str As String) As Double
    Dim 清理后Str As String
    Dim i As Integer
    For i = 1 To Len(货币Str)
        Dim 字符 As String
        字符 = Mid(货币Str, i, 1)
        If IsNumeric(字符) Or 字符 = "." Or 字符 = "-" Then
            清理后Str = 清理后Str & 字符
        End If
    Next
    货币字符串转数值 = Val(清理后Str)
End Function

' 调用示例
Me.totalSales.Caption = FormatCurrency(货币字符串转数值(Me.firstDaySales.Caption) + 货币字符串转数值(Me.secondDaySales.Caption))

内容的提问来源于stack exchange,提问作者Ambet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:39:03