要符合会计里的书写要求
需要把数字“1,2,3......” 转换为 大写的“壹贰叁...”,大家都有哪些方法可以实现呢?平时工作中又遇到这样的场景吗?

今天雷哥就跟大家分享下Excel中,大小写的那些事~
NUMBERSTRING函数是Excel中隐藏函数
语法 NUMBERSTRING(数值,格式)
其中:
- 格式为1:普通大写,如“三百八十一”;
- 格式为2:财务大写,如“柒佰捌拾”;
- 格式为3:数字大写,如“三五一”;
具体如下

参数为1,普通大写

参数为2,财务大写

参数为3,普通大写

可以通过修改单元格格式,特殊--中文大写数字,实现大小写转换。

03 TEXT函数法
语法:TEXT(要转换的数值,格式参数)
其中:
- 格式参数为"[dbnum1]":普通大写,如“二百五十九”;
- 格式参数为"[dbnum2]":财务大写,如“柒佰捌拾”;
- 格式参数为"[dbnum3]":阿拉伯数字+单位,如“2百4十9”;

04 直接套用公式法
=IF(B2=0,"零元",IF(B2<0,TEXT(INT(ABS(B2)),"负[DBNum2]g/通用格式")&"元"&IF((INT(B2*10)-INT(B2)*10)=0,"",TEXT(INT(B2*10)-INT(B2)*10,"[DBNum2]")&"角")&IF((INT(B2*100)-INT(B2*10)*10)=0,"整",TEXT(INT(B2*10)-INT(B2*10),"[DBNum2]")&TEXT(INT(B2*100)-INT(B2*10)*10,"[DBNum2]")&"分"),TEXT(INT(B2),"[dbnum2]")&"元"&IF(INT(B2*10)-INT(B2)*10=0,"",TEXT(INT(B2*10)-INT(B2)*10,"[dbnum2]")&"角")&IF((INT(B2*100)-INT(B2*10)*10)=0,"整",TEXT(INT(B2*10)-INT(B2*10),"[DBNum2]")&TEXT(INT(B2*100)-INT(B2*10)*10,"[DBNum2]")&"分")))
如图所示,A1直接输入公式,然后在B2单元格中,直接输入数字,即可发现A1单元格中,就立马变为大写了。即使是带有小数,也可以完美实现大小写哦。

感谢大家的阅读,有任何问题欢迎沟通交流。
作者是 微信公众号【雷哥office】创始人,图书《竞争力:玩转职场Excel,从此不加班作者》,欢迎大家关注。
————————————————————————
更新日志
2019/7/7 看到很多财务朋友有小数翻译为大写的困惑,雷哥特意添加了方法4,谢谢大家阅读和支持
利用一个隐秘函数NUMBERSTRING稍加改造可以实现,这个函数连公式选项卡、帮助文件、公式记忆式键入里都没有。
格式为:NUMBERSTRING(单元格,参数),参数只有1或者2或者3
第一个参数为对象,第二个参数为中文格式,总共只有3种格式,可将数字转换为大写:

这里我们需要第二种,即NUMBERSTRING(单元格,2),在单元格内输入以下公式:
=IF(ISERROR(FIND(".",ROUND(单元格,2)))=TRUE,NUMBERSTRING(单元格,2)&"元",IF(LEN(MID(ROUND(单元格,2),FIND(".",ROUND(单元格,2))+1,LEN(ROUND(单元格,2))))=2,NUMBERSTRING(LEFT(ROUND(单元格,2),FIND(".",ROUND(单元格,2))-1),2)&"元"&NUMBERSTRING(MID(ROUND(单元格,2),FIND(".",ROUND(单元格,2))+1,1),2)&"角"&NUMBERSTRING(MID(ROUND(单元格,2),FIND(".",ROUND(单元格,2))+2,1),2)&"分",NUMBERSTRING(LEFT(ROUND(单元格,2),FIND(".",ROUND(单元格,2))-1),2)&"元"&NUMBERSTRING(MID(ROUND(单元格,2),FIND(".",ROUND(单元格,2))+1,1),2)&"角"))
可实现以下效果:

这个公式看起来很复杂,主要因为保留1位小数还是2位小数的问题,逻辑上其实可分为以下3块:

具体解释:因为正常情况下,金融数字只统计到分,所以我们先用ROUND(单元格,2)保留小数点后2位做四舍五入,然后:
- 当四舍五入后保留小数后2位后,对象仍是正整数的时候,我用了ISERROR(FIND(".",ROUND(单元格,2)))=TRUE来判断是否为正整数(该公式不支持负数,如果需要负数转换,就再嵌套两层IF就可以),是整数直接用NUMBERSTRING将对象转换为大写数字,后面用“&”符号连接一个“元”字;
- 当四舍五入后保留小数后2位后,小数点后面正好是2位,就需要用到FIND函数分别去定位“.”小数点的位置,然后用LEFT函数取小数点左边的数字用NUMBERSTRING转换为大写,连接一个“元”,再用MID函数分别取小数点右边的第一和第二位数字,分别连接“角”和“分”;
- 而当四舍五入后保留小数后2位后,小数点后面正好是1位(这是最后一种情况,什么意思呢?因为EXCEL里面使用ROUND函数取小数点后面的固定位数,如果四舍五入为0了,就不显示了,例如:ROUND(32.199,2),结果显示为32.2,而不是32.20,所以我们才用IF公式去判断小数点后面的是1位还是2位),这种情况下同2,不取“分”即可。
可以将这个公式复制在文档笔记里,需要的时候直接食用:
=IF(ISERROR(FIND(".",ROUND(单元格,2)))=TRUE,NUMBERSTRING(单元格,2)&"元",IF(LEN(MID(ROUND(单元格,2),FIND(".",ROUND(单元格,2))+1,LEN(ROUND(单元格,2))))=2,NUMBERSTRING(LEFT(ROUND(单元格,2),FIND(".",ROUND(单元格,2))-1),2)&"元"&NUMBERSTRING(MID(ROUND(单元格,2),FIND(".",ROUND(单元格,2))+1,1),2)&"角"&NUMBERSTRING(MID(ROUND(单元格,2),FIND(".",ROUND(单元格,2))+2,1),2)&"分",NUMBERSTRING(LEFT(ROUND(单元格,2),FIND(".",ROUND(单元格,2))-1),2)&"元"&NUMBERSTRING(MID(ROUND(单元格,2),FIND(".",ROUND(单元格,2))+1,1),2)&"角"))
我推荐USERRMB函数。
请看演示:

怎么实现呢?
自定义函数,一劳永逸!
原来,Excel中"隐藏"着这个人民币大写函数!Excel小写数字如何转换成中文大写?
工作中经常遇到需要将数字转换为中文大写,比如差旅费报销的时候,我们在Excel中填写好数据之后,如何自动转换成大写金额呢?
选中需要转换的数字,右键选择“设置单元格格式”(快捷键Ctrl+1);依次点击【特殊】—【中文大写数字】,即可。

我们来看下转换的效果:

可以发现的是,设置单元格格式这种方法仅适用于正整数的情况,如果出现负数或者小数,并不能很好地转换成中文大写。
NUMBERSTRING函数是Excel中的一个隐藏函数,可以将数据大写化。
语法:NUMBERSTRING(数字,类型)
参数二有三种类型供选择,分别是1/2/3,这里我们选择2,(大写中文),其它两种小伙伴们自行尝试。
转换效果如下所示:

上图可以看出,NUMBERSTRING函数转换效果基本同设置单元格格式法,仅能转换正整数,在遇到负数的时候会直接报错,小数则直接截断,不进行转换。
B2单元格输入以下公式:
=IF(A2<0,"负","")&IF(TRUNC(A2)=A2,TEXT(IF(A2<0,-A2,A2),"[DBNum2]")&"元整",IF(TRUNC(A2*10)=A2*10,TEXT(TRUNC(IF(A2<0,-A2,A2)),"[DBNum2]")&"元"&TEXT(RIGHT(A2),"[DBNum2]")&"角整",TEXT(TRUNC(A2),"[DBNum2]")&"元"&IF(ISNUMBER(FIND(".0",A2)),"零",TEXT(LEFT(RIGHT(A2,2)),"[DBNum2]")&"角")&TEXT(RIGHT(A2),"[DBNum2]")&"分"))
有点长,o(╯□╰)o
转换效果:

转换效果堪称完美,正数、负数、小数皆正确转换成中文。
公式解读:
公式整体是利用IF函数进行多层次判断,判断数据是否为负、是否为整数、为1位小数还是2位小数。
第一个IF函数用于判断数值是否小于0,如果小于0,则在范围内容的最前方加一个"负"字;
第二个IF函数用于判断数值是否为整数,TRUNC函数直接对数字格式的数据进行截断,这里参数2未输入,默认取整;取整后的数字等于数字,代表该数字是整数;

第三个IF函数用于判断数值是否为1位小数;如果为1位小数,分别取出整数与分数部分、转换大写,并添加单位;
最后一步默认数值是2位小数,分别取整数、小数部分进行转换以及添加单位。
[DBNum2]是数字格式函数,将数字转换成中文大写。
公式整体逻辑如此,小伙伴们对照着看下就好,涉及到的函数都比较简单,只不过需要多层嵌套,理清逻辑即可。
以上就是Excel中关于数字转换成大写中文的小技巧,分享给大家,希望有所帮助,我们下期再见~