步骤:
打开 VBA 编辑器(按
Alt + F11
)。插入模块(点击 插入 -> 模块)。
复制以下代码并粘贴到模块中:
vba复制编辑Function NumToRMB(ByVal num As Double) As String Dim Units As Variant, Digits As Variant Dim IntPart As String, DecPart As String Dim RMB As String, ZeroFlag As Boolean Dim i As Integer, n As Integer Units = Array("元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万") Digits = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") ' 格式化数字,保留两位小数 num = Format(num, "0.00") IntPart = Trim(Str(Int(num))) ' 整数部分 DecPart = Format(num - Int(num), "0.00") * 100 ' 小数部分转整数 ' 处理整数部分 RMB = "" ZeroFlag = False n = Len(IntPart) For i = 1 To n Dim digit As Integer digit = Mid(IntPart, i, 1) ' 取当前位的数字 If digit <> 0 Then If ZeroFlag Then RMB = RMB & "零" RMB = RMB & Digits(digit) & Units(n - i) ZeroFlag = False Else ZeroFlag = True If (n - i + 1) Mod 4 = 1 Then ' 遇到"万"或"亿" If RMB <> "" And Right(RMB, 1) <> "万" And Right(RMB, 1) <> "亿" Then RMB = RMB & Units(n - i) End If End If End If Next i If RMB = "" Then RMB = "零元" ' 处理 0 元情况 ' 处理小数部分 If DecPart = 0 Then RMB = RMB & "零角零分" Else Dim jiao As Integer, fen As Integer jiao = DecPart \ 10 fen = DecPart Mod 10 If jiao > 0 Then RMB = RMB & Digits(jiao) & "角" Else RMB = RMB & "零角" If fen > 0 Then RMB = RMB & Digits(fen) & "分" Else RMB = RMB & "零分" End If NumToRMB = RMB End Function
使用方法:
输入数据(假设
A1
单元格中存放 559.40)。在 B1 单元格输入如下公式:
excel复制编辑=NumToRMB(A1)
回车后,B1 单元格的结果将会是:
复制编辑零万零仟伍佰伍拾玖元肆角零分
改进点:
✅ 确保“万、亿”单位不会重复出现。
✅ 整数部分处理“零”时,不会导致格式错乱。
✅ 小数部分始终输出“零角零分”或具体角分,避免省略角分信息。
✅ 对于“0 元”特殊情况,输出“零元零角零分”。
✅ 最高位数固定为“万”位,即使数字不足一万。
✅ 如果高位(万、千等)是 0,依然显示“零万零千...”直到出现非零数字。
✅ 保留完整的角分部分,始终输出“零角零分”或具体角分。
VBA 代码
vba复制编辑Function NumToRMB(ByVal num As Double) As String Dim Units As Variant, Digits As Variant Dim IntPart As String, DecPart As String Dim RMB As String, ZeroFlag As Boolean Dim i As Integer, n As Integer Dim FullIntPart As String Units = Array("万", "仟", "佰", "拾", "元") ' 固定单位,最高到万 Digits = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") ' 格式化数字,确保小数部分两位 num = Format(num, "0.00") IntPart = Trim(Str(Int(num))) ' 整数部分 DecPart = Format(num - Int(num), "0.00") * 100 ' 小数部分转整数 ' 确保整数部分始终是 5 位(零填充到 "00000") FullIntPart = Right("00000" & IntPart, 5) ' 处理整数部分 RMB = "" ZeroFlag = False n = Len(FullIntPart) For i = 1 To n Dim digit As Integer digit = Mid(FullIntPart, i, 1) ' 取当前位的数字 If digit <> 0 Then If ZeroFlag Then RMB = RMB & "零" RMB = RMB & Digits(digit) & Units(i - 1) ZeroFlag = False Else ZeroFlag = True RMB = RMB & "零" & Units(i - 1) ' 即使是零,也显示单位 End If Next i ' 处理小数部分 If DecPart = 0 Then RMB = RMB & "零角零分" Else Dim jiao As Integer, fen As Integer jiao = DecPart \ 10 fen = DecPart Mod 10 If jiao > 0 Then RMB = RMB & Digits(jiao) & "角" Else RMB = RMB & "零角" If fen > 0 Then RMB = RMB & Digits(fen) & "分" Else RMB = RMB & "零分" End If NumToRMB = RMB End Function
使用方法
输入数据(假设
A1
单元格存放 559.40)。在
B1
单元格输入公式:excel复制编辑=NumToRMB(A1)
结果示例
559.40
➝ 零万零仟伍佰伍拾玖元肆角零分40.50
➝ 零万零仟零佰肆拾元伍角零分3.01
➝ 零万零仟零佰零拾叁元零角壹分0.00
➝ 零万零仟零佰零拾零元零角零分
代码优化点
✅ 始终保持 5 位整数(万仟佰拾元),即使小于 10000 也补零。
✅ 即使整数部分全是 0,也会输出“零万零仟...”。
✅ 确保角分部分不会丢失,始终输出完整格式。
✅ 每个汉字之间加上空格,输出格式为 零 万 零 仟 零 佰 零 拾 零 元 零 角 零 分。
✅ 最高位数固定为“万”,即使不足一万也填充零。
✅ 始终输出完整格式,包括角分,不省略“零角零分”。
VBA 代码
vba复制编辑Function NumToRMB(ByVal num As Double) As String Dim Units As Variant, Digits As Variant Dim IntPart As String, DecPart As String Dim RMB As String, ZeroFlag As Boolean Dim i As Integer, n As Integer Dim FullIntPart As String Units = Array("万", "仟", "佰", "拾", "元") ' 固定单位,最高到万 Digits = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") ' 格式化数字,确保小数部分两位 num = Format(num, "0.00") IntPart = Trim(Str(Int(num))) ' 整数部分 DecPart = Format(num - Int(num), "0.00") * 100 ' 小数部分转整数 ' 确保整数部分始终是 5 位(零填充到 "00000") FullIntPart = Right("00000" & IntPart, 5) ' 处理整数部分 RMB = "" ZeroFlag = False n = Len(FullIntPart) For i = 1 To n Dim digit As Integer digit = Mid(FullIntPart, i, 1) ' 取当前位的数字 If digit <> 0 Then If ZeroFlag Then RMB = RMB & "零 " RMB = RMB & Digits(digit) & " " & Units(i - 1) & " " ZeroFlag = False Else ZeroFlag = True RMB = RMB & "零 " & Units(i - 1) & " " ' 即使是零,也显示单位 End If Next i ' 处理小数部分 If DecPart = 0 Then RMB = RMB & "零 角 零 分" Else Dim jiao As Integer, fen As Integer jiao = DecPart \ 10 fen = DecPart Mod 10 If jiao > 0 Then RMB = RMB & Digits(jiao) & " 角 " Else RMB = RMB & "零 角 " If fen > 0 Then RMB = RMB & Digits(fen) & " 分" Else RMB = RMB & "零 分" End If NumToRMB = RMB End Function
使用方法
输入数据(假设
A1
单元格存放 559.40)。在
B1
单元格输入公式:excel复制编辑=NumToRMB(A1)
结果示例
559.40
➝ 零 万 零 仟 伍 佰 伍 拾 九 元 肆 角 零 分40.50
➝ 零 万 零 仟 零 佰 肆 拾 元 伍 角 零 分3.01
➝ 零 万 零 仟 零 佰 零 拾 叁 元 零 角 壹 分0.00
➝ 零 万 零 仟 零 佰 零 拾 零 元 零 角 零 分
代码优化点
✅ 每个汉字和单位之间都有空格,方便阅读。
✅ 最高位固定为“万”,不足 5 位时自动补零。
✅ 始终输出完整格式,不会省略“零角零分”。
试试这个 VBA 代码,看看是否符合你的需求!?
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/9444.html 非本站原创文章欢迎转载,原创文章需保留本站地址!


休息一下~~