步骤:
打开 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 元”特殊情况,输出“零元零角零分”。
✅ 最高位数固定为“万”位,即使数字不足一万。 输入数据(假设 在 结果示例 ✅ 始终保持 5 位整数(万仟佰拾元),即使小于 10000 也补零。 ✅ 每个汉字之间加上空格,输出格式为 零 万 零 仟 零 佰 零 拾 零 元 零 角 零 分。 输入数据(假设 在 结果示例 ✅ 每个汉字和单位之间都有空格,方便阅读。 试试这个 VBA 代码,看看是否符合你的需求!?
✅ 如果高位(万、千等)是 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
➝ 零万零仟零佰零拾零元零角零分代码优化点
✅ 即使整数部分全是 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 位时自动补零。
✅ 始终输出完整格式,不会省略“零角零分”。
本文链接:https://hqyman.cn/post/9444.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

