数字大小写金额转换excel

一开始,我是真想破脑袋。Excel里那些函数,什么LEFT,RIGHT,MID,CONCATENATE,FIND,SUBSTITUTE……我琢磨着是不是能用这些七拼八凑搞一个公式出来,把那个数字金额变成大写。你知道吗,真有人去试过!我见过网上那种大神写的公式,长得像个贪吃蛇,曲里拐弯,一行能拉出好几屏。你看着都眼晕,别说理解了。而且,那种公式,处理个整数小数可能还行,但遇到中间有零、末尾有零、或者带“角”、“分”的复杂情况,分分钟给你崩盘。维护起来更是噩梦,一个符号错了,全盘皆输。更关键的是,它不!好!用!难道我每次都要复制粘贴那么一大坨公式吗?

折腾了几次,交了几次学费(返工真是最贵的学费),终于有人点醒了我:数字大小写金额转换这事儿,在Excel里,有更优雅、更靠谱的解法。不是那些弯弯绕的公式,也不是费眼睛的手写,而是——VBA

对,就是那个藏在Excel深处的家伙,Visual Basic for Applications。听着是不是有点唬人?编程?别怕,这玩意儿,对于把数字金额变成大写这件事来说,简直是杀鸡用牛刀,但杀得那叫一个干净利落。而且你不需要真的去学编程,很多时候,你需要做的,仅仅是把别人写好的、经过千锤百炼的代码,复制粘贴进去,然后,奇迹就发生了。

怎么操作呢?深呼吸,别紧张。

第一步:打开你的Excel文件。然后按下神奇的组合键:Alt + F11。唰!一个新的窗口弹出来了,这就是VBA的编辑界面,长得有点朴素,像上个世纪的软件,但别小瞧它,能量大着呢。

第二步:在这个VBA窗口的左边,找到你的Excel文件对应的项目(通常是VBAProject(你的文件名.xlsx)),右键点击它,选择“插入(Insert)” -> “模块(Module)”。一个新的空白窗口会在右边出现,这就是你写代码或者粘贴代码的地方。

第三步:现在,去网上搜一个现成的“Excel金额转大写VBA代码”。这种代码多得是,找一个看起来比较标准、评论不错的就行。我给你找一个比较经典的,大致是这样的(代码本身也是重点啊,虽然你不用完全懂,但它就是魔法的咒语):

“`vba
‘ 这个函数用来将数字金额转换成中文大写
‘ 使用方法:在单元格中输入 =RMB(A1) 其中A1是包含数字金额的单元格

Function RMB(n)
Dim s As String
Dim s1, s2, s3, s4 As String
Dim d As Long
Dim i, j As Integer
Dim bMinus As Boolean ‘ 是否负数

If Not IsNumeric(n) Then
    RMB = "非数字类型"
    Exit Function
End If

If Abs(n) > 999999999999.99 Then ' 金额过大,自己看着调整上限
    RMB = "金额过大"
    Exit Function
End If

If n = 0 Then
    RMB = "零元整"
    Exit Function
End If

bMinus = (n < 0) ' 检查是否负数
n = Abs(n) ' 取绝对值进行处理

s1 = "零壹贰叁肆伍陆柒捌玖"
s2 = "万仟佰拾亿仟佰拾万仟佰拾元"
s3 = "角分"

s = Format(n, "0.00") ' 格式化为小数点后两位
i = InStr(s, ".") ' 找到小数点位置

s4 = ""
If i > 0 Then ' 有小数部分
    s2 = Left(s2, 25 - i) ' 截取整数部分单位
    s4 = Mid(s, i + 1) ' 获取小数部分
End If
s = Left(s, i - 1) ' 获取整数部分

For i = 1 To Len(s)
    d = Val(Mid(s, i, 1))
    s1 = s1 & Mid(s1, d + 1, 1)
    s4 = s4 & Mid(s2, i, 1)
Next

s = s1 & s4 ' 组合整数部分转换结果和单位
s = Replace(s, "零仟", "零")
s = Replace(s, "零佰", "零")
s = Replace(s, "零拾", "零")
s = Replace(s, "零万", "万")
s = Replace(s, "零亿", "亿")
s = Replace(s, "零零", "零")
s = Replace(s, "亿万", "亿") ' 处理亿和万连在一起
s = Replace(s, "零元", "元")
s = Replace(s, "零角", "零") ' 零角只显示一个零,除非后面还有分
s = Replace(s, "零分", "") ' 零分直接去掉
s = Replace(s, "零整", "整") ' 处理末尾的零整
s = Replace(s, "元整", "整") ' 没有角分时,元整变整

If Right(s, 1) = "零" And Len(s) > 1 Then s = Left(s, Len(s) - 1) ' 如果最后是零,去掉
If Right(s, 1) = "元" Then s = s & "整" ' 如果最后是元,加整

' 处理小数部分
If Len(s4) = 2 Then
    If Mid(s4, 1, 1) <> "0" Then
         s = s & Mid(s1, Val(Mid(s4, 1, 1)) + 1, 1) & "角"
    Else
         If Len(s) > 0 And Right(s, 1) <> "零" Then s = s & "零" ' 整数部分非零才加零,避免 零元零角
    End If

    If Mid(s4, 2, 1) <> "0" Then
         s = s & Mid(s1, Val(Mid(s4, 2, 1)) + 1, 1) & "分"
    Else
         If Len(s) > 0 And Right(s, 1) <> "零" And Right(s, 1) <> "角" And Len(s) > 1 Then s = s & "整" ' 如果有角无分,末尾加整
    End If
ElseIf Len(s4) = 1 Then ' 只有一位小数
     If Mid(s4, 1, 1) <> "0" Then
         s = s & Mid(s1, Val(Mid(s4, 1, 1)) + 1, 1) & "角"
         s = s & "整" ' 只有角没有分,加整
     Else
         If Len(s) > 0 And Right(s, 1) <> "零" Then s = s & "整"
     End If
Else ' 没有小数
    If Right(s, 1) = "元" Then s = s & "整"
End If


s = Replace(s, "元零角整", "元整") ' 处理元零角整这种情况
s = Replace(s, "元零分", "元整") ' 处理元零分这种情况
s = Replace(s, "元零角", "元整") ' 处理元零角的情况
s = Replace(s, "零元", "零") ' 处理零元整的情况

If Right(s, 1) = "零" And Len(s) > 1 Then s = Left(s, Len(s) - 1) ' 最后再检查一次末尾的零

If bMinus Then s = "负" & s ' 加上负数标记

RMB = s ' 将结果返回

End Function
“`

把这段代码(或者你找到的其他类似代码)完整地粘贴到刚才打开的模块窗口里。别多想,复制粘贴,听我的。粘贴完,Ctrl + S 保存一下,然后直接关掉VBA窗口,回到你的Excel表格。

第四步:现在是见证奇迹的时刻。在你的表格里,比如A列是数字金额,你想在B列显示大写金额。在B1单元格里输入公式:=RMB(A1)。这里的“RMB”就是刚才那段VBA代码里 Function RMB(n) 定义的函数名。如果你找的代码函数名不一样,就用它定义的名字。括号里,A1 就是你要转换的那个数字所在的单元格。

敲下回车!有没有!那个数字,是不是瞬间就变成了规范的中文大写金额了?壹仟贰佰叁拾肆元伍角陆分!或者伍拾元整!甚至是一佰万零伍拾元!那种之前让你头疼、手酸、眼花的大小写转换,现在只需要一个简单的公式就搞定了。

你把B1单元格的公式往下一拉,所有A列的数字金额,B列对应的大写就全部自动生成了。快到飞起,准到没朋友。而且,重点来了,如果A列的数字改了,B列的大写金额会立刻、马上跟着变!这才是真正的解放生产力啊!

用这个方法处理报销单、发票汇总、支票填写模版,简直是如鱼得水。以前花半小时甚至一小时校对大写,现在可能几分钟就搞定了。

当然,这个方法有个小小的注意事项。因为用到了,你的Excel文件需要保存成启用的格式,也就是.xlsm文件,而不是普通的.xlsx。保存的时候文件类型选对就行。还有,打开这个文件的时候,Excel可能会跳出一个安全警告,问你是否启用。放心,只要这个是你自己粘贴进去的,或者来源可靠(比如公司内部提供的标准模版),启用它没问题。如果是个来路不明的文件带,那就要小心了。但我们这是为了解决自己的大小写转换问题,安全可控。

除了VBA,前面也提过,确实有卖现成的Excel插件,安装完也能实现金额大小写转换。那种更傻瓜,安装了就能用,可能还有别的附加功能。如果你觉得VBA还是有点“技术”,或者公司不允许自己随便捣鼓VBA,可以考虑插件。但对我个人而言,一段简单的VBA代码,一次设置好,基本能解决绝大多数问题,而且自由度高,不依赖第三方软件,感觉更踏实。

所以啊,别再对着数字金额发愁怎么写大写了,也别去挑战那些折磨人的公式了。打开你的Excel,按Alt+F11,插入一个模块,把那段救命的VBA代码粘贴进去,然后用=RMB()(或者你取的函数名)调用它。就这么简单几步,彻底告别金额大小写转换的烦恼。把省下来的时间,去干点更值得的事情吧!比如,好好检查一下那些数字本身有没有错,或者,干脆起身去倒杯咖啡,享受一下自动化带来的小确幸。这感觉,真挺好。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注