当时我就愣住了。大写?不就是“一二三四”吗?可阿姨说的是那种更复杂的,“壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿”!天哪,几百块钱还好说,要是几千几万,我得数手指头数半天,还得小心翼翼地不写错别字。特别是那个“零”,有时候得写,有时候又不能写,到底啥时候该出现,我完全没概念。手动转换,那效率,那出错率,简直了!
后来接触了表格软件,比如Excel啊、WPS啊,以为能轻松搞定。毕竟屏幕上数字清清楚楚,总该有个按钮,点一下,duang!变大写了吧?Too young, too naive。
一开始,我试过笨办法。比如,把数字复制出来,到网上找那种“数字转大写”的在线工具,转换好了再复制回去。这法子对付一两个数字还行,要是表格里一大堆金额,或者金额随时可能变动,那就彻底抓瞎了。改个数字,还得重新复制粘贴一遍,繁琐得要命。而且,在线工具的转换规则,有时候跟财务要求的格式还不完全一样,比如小数点后面的处理,就挺麻烦。
我还幻想过,是不是改一下单元格格式就行?就像把数字变成日期、时间、货币那样。确实有货币格式,能加上人民币符号,能控制小数点位数,但它显示出来的数字本体,还是阿拉伯数字“123.50”,而不是汉字大写“壹佰贰拾叁元伍角”。这条路,不通!
难道,真得学那些写程序的哥们儿,去搞什么VBA(Visual Basic for Applications)宏代码?听说VBA能自动化很多操作,写一段代码,让它去读单元格里的数字,然后根据规则生成大写汉字。这听着就头大,对于我这种只会点皮毛的表哥表姐来说,写代码,那跟看天书没两样。门槛太高了!
就在我快要放弃,准备老老实实回去手动转换的时候,一位好心的同事点醒了我:“用函数啊!TEXT
函数就能搞定!”
TEXT
函数?之前没怎么注意过这个函数,光看名字,感觉就是把什么东西变成文本。它怎么跟数字大写扯上关系了?同事神秘一笑,写了个公式给我看:
=TEXT(A1,"[DbNum2]G/通用格式")
A1,是我要转换数字所在的单元格。关键是后面那一串儿像咒语一样的格式代码:"[DbNum2]G/通用格式"
。
这串代码是什么意思呢?同事解释说,TEXT
函数的作用,就是把一个数值(这里是A1单元格的数字),按照你指定的格式显示出来,而且,结果是以文本形式存在的。这就非常重要了,文本才能显示那些不规则的汉字。
而[DbNum2]
,嘿,这才是真正的奥秘所在!它是Excel/WPS内置的一个特殊的格式代码,专门用来把数字转换成中文大写数字,就是我们前面说的壹、贰、叁那些。
G/通用格式
呢,它告诉函数,按照一般的数字格式来处理,配合[DbNum2]
,就能把整数部分正确地转换过来。
比如,A1单元格里写着“123”。套上这个公式:=TEXT(A1,"[DbNum2]G/通用格式")
,结果单元格里瞬间就变成了“壹佰贰拾叁”。哇!当时看到这个结果,简直要跳起来了!困扰我这么久的问题,一个公式,几个字符,就解决了!
当然,实际应用中,光有“壹佰贰拾叁”还不够啊,我们填报销单,写合同金额,通常是要加上“元”甚至“角”、“分”,最后还得有个“整”字。这该怎么办呢?
别急,格式代码是可以继续加东西的。最简单粗暴的,直接在格式代码后面加上你想要的文本:
=TEXT(A1,"[DbNum2]G/通用格式元整")
如果A1是“123”,结果就是“壹佰贰拾叁元整”。
但是,这个方法有点儿太简单了。如果A1是“123.5”,结果会变成“壹佰贰拾叁点伍元整”。咦?“点伍”?不对啊,金额里小数点后面应该是“角”、“分”才对啊!而且,有小数的时候,通常是不加“整”字的。
这时候,就需要更精细地控制格式代码了。想处理角分,得把格式代码写得更详细一点:
=TEXT(A1,"[DbNum2]G/通用格式元玖角玖分")
这个格式代码,后面的“玖角玖分”是举例,实际应该是通过零和单位来控制的。更常见的写法是:
=TEXT(A1,"[DbNum2]G/通用格式元") & IF(MOD(A1,1)>0,TEXT(MOD(A1,1)*100,"[DbNum2]0角0分"),"整")
这个公式看着复杂多了,拆开说:
* TEXT(A1,"[DbNum2]G/通用格式元")
:先把整数部分和小数点前的部分转成大写,后面加上“元”。
* &
:是连接符,把前面的结果和后面的结果连起来。
* IF(MOD(A1,1)>0, ... , "整")
:这是一个判断。MOD(A1,1)
取A1的小数部分。如果小数部分大于0(说明不是整数),就执行逗号后面的第一个TEXT
函数;如果小数部分等于0(是整数),就直接显示“整”。
* TEXT(MOD(A1,1)*100,"[DbNum2]0角0分")
:这部分处理小数。MOD(A1,1)*100
把小数(比如0.5)变成整数(50)。然后用TEXT
函数,[DbNum2]
继续转大写,0角0分
是指定格式,强制显示角和分,即使是零也会显示“零”。比如50会转成“伍拾”,格式代码0角0分
会让它显示成“伍角零分”。如果数字是123.5,前面得到“壹佰贰拾叁元”,后面得到“伍角零分”,合起来就是“壹佰贰拾叁元伍角零分”。如果数字是123.56,合起来就是“壹佰贰拾叁元伍角陆分”。
这个公式已经比较接近财务上常用的格式了。但实际中,可能还有更变态的要求,比如“零角”可以省略,“零分”必须省略,或者最后一位是零但前面有非零小数时不能加“整”等等。这些就需要在公式里加入更多的IF
、AND
、OR
逻辑判断,或者用查找替换等函数配合。说实话,写到那程度,公式能变得非常长,非常烧脑,一不小心就容易出错。
不过,对于绝大多数场景,特别是报销这种,前面提到的基础TEXT(A1,"[DbNum2]G/通用格式元")
,甚至更完善一点的那个带角分的,已经完全够用了。
学会了这个TEXT
函数结合[DbNum2]
格式代码的方法,感觉就像拥有了魔法。以前看到表格里的数字金额就头疼,现在轻松加一列,一个公式拖到底,唰唰唰,全变成规范的汉字大写了。效率提高了不知多少倍,关键是,再也不怕写错字被退单了!那种成就感,没体验过的可能体会不到。
而且,掌握了这个思路,你还会发现,TEXT
函数不仅仅能转大写。它能把数字变成各种各样的文本格式,比如把日期变成“XXXX年XX月XX日”,把电话号码强制显示区号括号等等。这真是个强大又灵活的函数!
所以,别再傻傻地手动转换了,也别一上来就想着去学什么高深的VBA。对于绝大多数需要在表格里把数字变成大写汉字的情况,记住TEXT(单元格,"[DbNum2]G/通用格式元角分...")
这个核心函数和格式代码,再根据具体要求稍微调整一下,绝对管用!
当然,如果你的办公软件版本比较新,或者用的是某些特定的财务模板,可能还会内置一些更傻瓜式的宏按钮或者自定义函数,点一下或者用一个简单的函数名(比如 =RMB(A1)
这种),就能直接生成规范的大写金额。这个你可以自己摸索一下,看有没有这样的捷径。但话说回来,知其然也知其所以然总是好的,掌握了TEXT
和[DbNum2]
,你才能应对各种奇奇怪怪的格式要求。
总而言之,表格里的数字转大写,这事儿真没那么难,也真没那么神秘。一个小小的函数,几个关键的代码,就能让你告别手动烦恼,瞬间变身表格处理达人。下次再碰到这问题,别犯愁,试试我说的这个方法,保证你事半功倍!而且,你会发现,很多看着复杂的问题,背后往往都有一个简单而有效的工具在等着你去发现和使用。这就是,知识的力量吧。
发表回复