还在一个个敲?Excel数字变大写,财务人都在偷偷用的这招,手把手教你彻底告别手输!excel怎么数字变大写看这篇就够了!
你说Excel里把数字转成中文大写,是不是听着就头大?尤其是那些跟钱沾边的单子,报销啦、付款啦、开票啦,随便哪一个,金额栏后面紧跟着的就是要求你用中文大写再写一遍。哎呀,看着那阿拉伯数字,心里就犯怵,生怕一个手抖,就把“1”敲成了“壹”,把“2”敲成了“贰”,更别提那复杂的角分厘了,小数点后面那位是“角”还是“分”?有没有“零”?啥时候得加个“整”?想想就头晕脑胀。
我刚入行那会儿,光是填个报销单,对着一堆数字,手心就冒汗。特别是金额大点儿的,12345.67,得变成‘壹万贰仟叁佰肆拾伍元陆角柒分’。小数点都不能错,差一个字儿都可能被打回来重做,甚至惹上麻烦!你说这不是要命吗?一笔一划地写,写错了要涂改,不规范。在Excel里一个个敲?效率低不说,更容易出错!难道就没有更…智能点的办法吗?天天敲,谁受得了啊!
嘿,别急!今天啊,我就跟你分享一个压箱底的宝贝,呃,其实也不能算压箱底,就是很多人可能不知道或者觉得难,但一旦掌握,保准你拍大腿叫绝的小技巧!学会这个,以后再碰到Excel里需要数字大写的情况,轻松搞定,简直不要太爽!
说白了,就是让Excel乖乖听话,把那些阿拉伯数字,一键变成咱们熟悉的,规规矩矩的中文大写。而且,是财务上常用的那种大写,带“元”、“角”、“分”,该“整”的时候一点不含糊!
通常来讲,在Excel里实现数字转中文大写,主要有两种方法,都挺实用的,看你喜欢哪种。
方法一:运用TEXT函数,最接地气、最直接的公式大法!
这个方法可以说是小白也能懂,学会一个万能公式,以后复制粘贴修改单元格就行。它的核心是Excel里的TEXT
函数。
想象一下,TEXT
函数就像个魔术师,你能告诉它一个数字(或者日期、时间什么的),然后给它一个格式代码,它就能把这个数字按照你的要求,“变”成特定格式的文本!咱们要的中文大写,特别是财务大写,就有对应的格式代码。
这个神奇的格式代码是什么呢?是[DBNum2]G/通用格式
。
[DBNum2]
:这个就是关键,它告诉Excel,我要的是中文大写字符,像“壹”、“贰”、“叁”这种。
G/通用格式
:这部分是为了让Excel先按照通用数字格式处理一下原始数字,避免一些奇怪的显示问题,比如在转换前数字里有逗号什么的。
所以,一个最基础的转换公式就是:
=TEXT(你要转换的数字所在的单元格,"[DBNum2]G/通用格式")
比如,你的数字在A1单元格,那公式就是:
=TEXT(A1,"[DBNum2]G/通用格式")
你在B1单元格输入这个公式,然后把A1改成12345,你看B1就会显示“壹万贰仟叁佰肆拾伍”了!是不是瞬间感觉要起飞?
但是!
光有数字大写不行啊,咱们财务上得有“元”、“角”、“分”,还得知道啥时候“整”啊!上面那个公式只能把数字本身转成大写,对于123.45,它可能只会转成“壹佰贰拾叁点肆伍”(或者别的,取决于具体的Excel版本和设置,但肯定不是规范的“元角分整”)。
别灰心!这只是基础。真正的财务大写,是需要更精细的公式来组合处理的。这个公式会看起来稍微复杂一点,因为它要考虑到整数部分、小数部分,以及各种零的情况,比如10000.00要显示“壹万元整”,123.05要显示“壹佰贰拾叁元零伍分”,123.40要显示“壹佰贰拾叁元肆角整”等等。
别怕,这个复杂公式不是让你自己推导,是直接拿来用的!这是一个比较通用、经得起考验的公式结构(不同的Excel版本和个人习惯可能略有差异,但核心思路一致)。你直接复制粘贴,然后把里面的A1改成你自己的单元格引用就行。
来,看好了,以A1单元格的数字为例(假设A1是你的原始金额),一个比较常用的财务大写公式可能是这样:
excel
=IF(A1=0,"零元整",IF(A1<0,"(负)"&TEXT(INT(ABS(A1)),"[DBNum2]")&"元"&IF(ROUND(MOD(ABS(A1),1),2)*100=0,"整",IF(TRUNC(MOD(ABS(A1),1)*10)=0,"零",TEXT(TRUNC(MOD(ABS(A1),1)*10),"[DBNum2]"))&"角"&IF(MOD(ROUND(ABS(A1)*100,0),10)=0,"",TEXT(MOD(ROUND(ABS(A1)*100,0),10),"[DBNum2]")&"分"))),TEXT(INT(A1),"[DBNum2]")&"元"&IF(ROUND(MOD(A1,1),2)*100=0,"整",IF(TRUNC(MOD(A1,1)*10)=0,"零",TEXT(TRUNC(MOD(A1,1)*10),"[DBNum2]"))&"角"&IF(MOD(ROUND(A1*100,0),10)=0,"",TEXT(MOD(ROUND(A1*100,0),10),"[DBNum2]")&"分"))))
是不是看着有点眼晕?没关系!你不用一行一行去理解它所有的逻辑,只需要知道它的组成部分在干啥:
- 开头的
IF(A1=0,"零元整",...)
:这是处理数字是0的情况。
IF(A1<0,"(负)"&...
:这部分处理负数,在前面加个“(负)”。
TEXT(INT(ABS(A1)),"[DBNum2]")&"元"
:这部分是把数字的整数部分(取绝对值后)转成大写,然后加上“元”。
IF(ROUND(MOD(ABS(A1),1),2)*100=0,"整",...)
:这部分判断小数部分是不是等于0,如果是,就加上“整”。
- 剩下的部分,就是通过
MOD
、TRUNC
、ROUND
等函数把小数部分的“角”和“分”拆出来,分别用TEXT(...,"[DBNum2]")
转成大写,再根据是零角还是零分,判断需不需要加“零”或者直接省略,最后拼接上“角”和“分”。
你看,虽然公式长,但它的逻辑很清晰:先管符号和零,再管整数和“元”,最后精细处理小数部分的“角分”和“整”。
怎么用呢?简单到哭!
- 找到你要显示中文大写的那个单元格(比如B1)。
- 选中B1单元格。
- 复制上面那个长长的公式。
- 在B1单元格的编辑栏里粘贴公式。
- 把公式里所有的
A1
(注意,如果是负数部分那里的ABS(A1)
也要改)都改成你实际要转换数字的那个单元格引用(比如如果你的数字在C5,就把公式里所有A1换成C5)。
- 按下回车键。
见证奇迹的时刻!B1单元格里是不是就显示出规范的中文大写金额了?
如果你有一列数字都需要转换,选中B1单元格右下角的小方块,往下拖动,Excel就会自动帮你填充公式,所有数字瞬间变大写!那种感觉,简直就像拥抱了全世界!
方法二:VBA宏代码,一劳永逸的自定义函数!
如果你觉得上面那个公式还是有点长,或者你需要在很多不同的工作簿里用到这个功能,再或者你想要更高级、更自定义的转换规则,那VBA宏代码就是你的菜了。
VBA听起来有点高大上,但别怕,咱们不是要从头学编程,只是把一段写好的代码“放”进Excel里,让它变成一个随时可以调用的“自定义函数”!
Excel本身其实有一个隐藏的功能,可以通过VBA的Application.NumberString
方法将数字转换为中文大写,不过它默认转换出来的格式可能也不是咱们财务上“元角分整”那么严格的格式(Type 1 是像“壹仟贰佰叁拾肆点伍陆”,Type 2 是像“一千二百三十四点五六”)。
所以,更常见的是,大家会使用一段已经写好的VBA代码,它会利用NumberString
或其他逻辑,最终输出符合财务要求的中文大写。这段代码通常被封装成一个“函数”,你可以在Excel里像使用SUM
或AVERAGE
一样去调用它。
这里提供一个经典的、网上流传很广且比较好用的VBA函数代码(这个代码可能会稍微长一点,因为它考虑到了各种复杂的金额情况):
“`vba
Function DX(N) ‘ 将数值金额转换为中文大写金额(财务专用)
If N = 0 Then
DX = “零元整”
Exit Function
End If
If N < 0 Then
DX = “(负)” & DX(-N)
Exit Function
End If
N = Round(N, 2) ‘ 保留两位小数,避免浮点误差
Dim C(15), D(15) As String
Dim i As Integer, j As Integer, k As Integer
Dim S As String, S1 As String, S2 As String
Dim R As String, R1 As String, R2 As String
C = Split("圆,角,分,万,仟,佰,拾,亿,仟,佰,拾,万,仟,佰,拾,", ",")
D = Split("零,壹,贰,叁,肆,伍,陆,柒,捌,玖,", ",")
S = Format(Int(N), "0") ' 整数部分
R = ""
For i = 1 To Len(S)
k = CInt(Mid(S, i, 1))
If k = 0 Then
If Mid(S, i + 1, 1) <> "零" And i <> Len(S) And i <> Len(S) - 4 And i <> Len(S) - 8 Then R = R & "零"
Else
R = R & D(k + 1) & C(Len(S) - i + 1)
End If
Next i
If InStr(R, "零圆") > 0 Then R = Replace(R, "零圆", "圆")
If InStr(R, "零万") > 0 Then R = Replace(R, "零万", "万")
If InStr(R, "零亿") > 0 Then R = Replace(R, "零亿", "亿")
If InStr(R, "亿万") > 0 Then R = Replace(R, "亿万", "亿") ' 处理如 1.01亿 的情况?不,这是处理 10000000000000000 的情况,这个函数主要处理财务金额,一般不会这么大。或者是指 10000.0000万 这种?
If Right(R, 1) = "零" Then R = Left(R, Len(R) - 1)
S1 = Format(N - Int(N), "0.00") ' 小数部分
S1 = Mid(S1, 3) ' 去掉小数点前的0.
R1 = ""
For i = 1 To Len(S1)
k = CInt(Mid(S1, i, 1))
If k = 0 Then
If i = 1 And Len(S) > 0 Then R1 = R1 & "零" ' 整数不为零,小数第一位为零,例如 123.05
' 如果小数部分后面还有非零数字,则不加零,例如 123.40,4就是角,0就是整
Else
R1 = R1 & D(k + 1) & C(3 - i)
End If
Next i
' 后期处理零角零分以及加“整”
If Right(R1, 1) = "零" Then R1 = Left(R1, Len(R1) - 1)
If Left(R1, 1) = "角" And Len(R1) = 1 Then R1 = "零" & R1 ' 处理 123.0x -> 零角
If R1 = "" And Len(S) > 0 Then R1 = "整" ' 没有小数部分且整数不为零 -> 整
If R1 = "零" Then R1 = "整" ' 小数部分转换为“零”,但其实是零角零分,应该显示“整”
If R <> "" Then
DX = R & R1
Else ' 处理 0.xx 的情况
DX = "零圆" & R1
If R1 = "整" Then DX = "零圆整"
End If
' 一些最终的清理
If Right(DX,1) = "零" Then DX = Left(DX,Len(DX)-1)
If Right(DX,1) = "圆" Then DX = DX & "整" ' 整数金额末尾加整
End Function
“`
这段代码稍微有点长,但它考虑的情况比较全面。Function DX(N)
定义了一个名为DX
的函数,接受一个数字N
作为输入,然后内部通过各种字符串处理和判断,最终返回中文大写的文本。
怎么把这段代码放到Excel里呢?
- 打开你的Excel工作簿。
- 按下
Alt + F11
键,这会打开VBA编辑器窗口。
- 在VBA编辑器的左侧,找到你的工作簿名称(通常是“VBAProject (你的文件名.xlsm)” 或 “.xlsx”)。
- 右键点击你的工作簿名称,选择“插入” -> “模块”。一个新的模块就会出现在“模块”文件夹下。
- 双击新插入的模块(比如Module1),右侧就会出现一个空白的代码编辑区域。
- 将上面那段完整的VBA代码复制,粘贴到这个空白区域里。
- 点击VBA编辑器菜单栏的“文件” -> “关闭并返回到 Microsoft Excel”。
现在,你就可以在Excel工作表里使用这个自定义函数了!比如,如果你的数字在A1,你在B1单元格里输入:
=DX(A1)
按下回车,B1单元格就会显示A1单元格数字对应的中文大写金额了!这个DX
函数会按照财务要求来处理,包括“元角分整”。
同样,如果你有多行数据,只需要选中B1,然后拖动填充柄往下拖,一整列的数字都会自动转换。
两种方法,怎么选?
- 如果你只是偶尔用一次,或者不太想折腾VBA, 那么方法一的公式就足够了。虽然公式看起来长,但复制粘贴修改单元格引用非常快。你可以把这个公式保存在一个文本文件里,需要的时候直接拿出来用。
- 如果你经常需要这个功能,而且在不同的Excel文件里都要用, 那么方法二的VBA自定义函数更方便。一旦把代码放进一个加载宏文件或者个人宏工作簿里,以后打开任何Excel文件都可以直接使用
=DX()
函数,非常省事儿。当然,使用VBA宏需要注意安全提示,第一次启用时Excel可能会询问是否启用宏,你需要选择启用。
一些小提醒:
- 仔细检查结果: 特别是金额巨大的或者带有复杂小数、很多零的数字,转换后一定要人工核对一下,毕竟公式或代码再厉害,也可能在极少数边缘情况出点小岔子,而且财务无小事嘛!
- 复制数值: 有时候你可能不希望B列(存放公式/宏的列)依赖于A列的数值变动而自动更新,或者你想把这个转换好的大写金额复制到别的地方(比如另一个软件或另一个工作簿)。这时,你可以选中转换好的大写金额列,复制,然后在目标位置选择“选择性粘贴” -> “数值”。这样粘贴过去的就纯粹是文本,不会变了。
- 关于精度: 金额计算要注意精度问题。上面的公式和VBA代码中都有对数字进行
ROUND
处理的步骤(通常是保留两位小数),这是为了避免浮点数计算引起的微小误差导致转换出错。
好啦,下次再看到那些让你头疼的数字大写,心里就有底啦!无论是复制粘贴公式,还是调用自定义函数,都能让你迅速搞定任务,把省下来的时间用来喝杯咖啡或者做点更重要的事儿!别再傻傻地一个个敲了,赶紧试试吧!掌握了这个小技巧,你在同事眼里瞬间就成了“Excel高手”!