Excel负数金额转大写终极指南:告别财务错误,一键生成规范凭证!
最近啊,财务部的同事老是抱怨,说用Excel做账,负数金额转大写简直是个噩梦。手写凭证的时代早就过去了,但Excel里负数金额转大写的问题,依然像个小虫子一样时不时咬你一口,烦得很!
想想也是,手动改来改去,不仅效率低,还容易出错。尤其是一不小心多加个零、少写个字,那可就麻烦大了,轻则重做,重则财务报表都得跟着遭殃。
所以说,今天我就来跟大家聊聊Excel负数金额转大写的那些事儿,保证让你看完之后,彻底告别这个烦恼!
先说说痛点吧,为什么负数金额转大写这么让人头疼?
主要是Excel自带的函数,比如NUMBERSTRING,对负数的支持不太友好。直接用这个函数转换,要么直接报错,要么出来的结果不符合财务规范。
举个例子,你用NUMBERSTRING( -123.45, 2),结果估计会让你哭笑不得,根本没法用。
那怎么办呢?难道真的要回到手写凭证的时代?当然不行!
解决思路:思路决定出路!
我们的核心思路是:先把负数变成正数,转换成大写后再加个“负”字,完美!
具体操作,一步一步来:
- 绝对值函数ABS登场: 首先,我们要用ABS函数把负数变成正数。这个函数的作用很简单,就是返回一个数的绝对值。比如,ABS(-123.45)的结果就是123.45。
- TEXT函数格式化金额: 接着,我们要用TEXT函数把金额格式化成标准的财务格式,保留两位小数。公式大概是这样:TEXT(ABS(A1), “0.00”),其中A1是包含负数金额的单元格。
-
自定义函数大显神通: 重头戏来了!我们需要一个自定义函数来实现金额转大写。别怕,这个不难,跟着我来:
- 按下Alt + F11,打开VBA编辑器。
- 在VBA编辑器中,点击“插入” -> “模块”。
- 在模块中输入以下代码:
vba
Function NumToChinese(Num As Double) As String
Dim MyStr As String, MoneyVal As String
Dim Qian As String, Yuan As String, Jiao As String, Fen As String
Dim i As Integer, Temp As Integer
MoneyVal = Format(Abs(Num), "0.00")
Qian = ""
Yuan = ""
Jiao = ""
Fen = ""
MyStr = ""
'处理角分
Temp = Int(Right(MoneyVal, 2))
Fen = Application.WorksheetFunction.Text(Temp Mod 10, "[DBNum2]") & "分"
Jiao = Application.WorksheetFunction.Text(Int(Temp / 10), "[DBNum2]") & "角"
'处理元
MoneyVal = Int(MoneyVal)
For i = 1 To Len(MoneyVal)
Temp = Mid(MoneyVal, Len(MoneyVal) - i + 1, 1)
Select Case i
Case 1: Yuan = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "元"
Case 2: Yuan = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "拾" & Yuan
Case 3: Yuan = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "佰" & Yuan
Case 4: Yuan = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "仟" & Yuan
Case 5: Qian = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "万"
Case 6: Qian = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "拾" & Qian
Case 7: Qian = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "佰" & Qian
Case 8: Qian = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "仟" & Qian
Case 9: Qian = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "亿" & Qian
Case 10: Qian = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "拾" & Qian
Case 11: Qian = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "佰" & Qian
Case 12: Qian = Application.WorksheetFunction.Text(Temp, "[DBNum2]") & "仟" & Qian
End Select
Next i
MyStr = Qian & Yuan & Jiao & Fen
MyStr = Replace(MyStr, "零拾", "零")
MyStr = Replace(MyStr, "零佰", "零")
MyStr = Replace(MyStr, "零仟", "零")
MyStr = Replace(MyStr, "零万", "万")
MyStr = Replace(MyStr, "零亿", "亿")
MyStr = Replace(MyStr, "零元", "元")
MyStr = Replace(MyStr, "零角", "零")
MyStr = Replace(MyStr, "零分", "")
MyStr = Replace(MyStr, "零零", "零")
MyStr = Replace(MyStr, "零零", "零")
MyStr = Replace(MyStr, "零元", "元")
If Right(MyStr, 1) = "零" Then MyStr = Left(MyStr, Len(MyStr) - 1)
If MyStr = "" Then MyStr = "零元"
NumToChinese = MyStr
End Function- 关闭VBA编辑器。
- 公式组合,大功告成: 最后,在Excel单元格中输入以下公式:=IF(A1<0, “负”&NumToChinese(ABS(A1)), NumToChinese(A1))。
解释一下这个公式:
- IF(A1<0, …, …):判断A1单元格中的数值是否小于0,也就是判断是否为负数。
- “负”&NumToChinese(ABS(A1)):如果A1是负数,就先加上一个“负”字,然后调用自定义函数NumToChinese将绝对值转换成大写。
- NumToChinese(A1):如果A1不是负数,就直接调用自定义函数转换成大写。
就这样,一个完美的负数金额转大写的公式就诞生了!以后再也不用为这个事情烦恼了,简直不要太方便!试试看,你就会发现,财务工作也能变得轻松愉快!