数字汉字大写(人民币金额大写自动转换公式)
前言
经常遇到搞财务的想把表格里的数字金额变为大写人民币的问题,在网上搜能找到有个很长很复杂的公式,复制过去直接用,逐个选择对应的单元格,细心点一般能搞定。但当遇到金额小数点后面精确到分以下的位数时,拷来的公式可能会对金额的分值显示错误,不太靠得住,今天提供一个非常简单的函数实现这个功能,对函数不懂的小白们也能轻松掌握。
案例
上图B5单元格公式为从网上搜到的公式:
=IF(A5<=0,"",TEXT(INT(A5),"[dbnum2]¥G/通用格式")&"元"&IF(INT(A5*10)-INT(A5)*10=0,IF(INT(A5)*(INT(A5*100)-INT(A5*10)*10)=0,"","零"),TEXT(INT(A5*10)-INT(A5)*10,"[dbnum2]")&"角")&IF((INT(A5*100)-INT(A5*10)*10)=0,"整",TEXT((INT(A5*100)-INT(A5*10)*10),"[dbnum2]")&"分"))
最后的分值数值为3分,显示出来结果却为贰分,显然有问题。其实将A列增加显示小数点位数可发现,A5单元格小数点后实际数值为.727。所以公式得出贰分的原因为公式没有进行四舍五入。修改公式为:
=IF(A5<=0,"",TEXT(INT(A5),"[dbnum2]¥G/通用格式")&"元"&IF(INT(A5*10)-INT(A5)*10=0,IF(INT(A5)*(INT(A5*100)-INT(A5*10)*10)=0,"","零"),TEXT(INT(A5*10)-INT(A5)*10,"[dbnum2]")&"角")&IF((INT(A5*100)-INT(A5*10)*10)=0,"整",TEXT((INT(ROUND(A5*100,0))-INT(A5*10)*10),"[dbnum2]")&"分"))
分值结果变为“叁分 ",其实到这里还没有完,这个公式没有考虑金额为负的情况,如果金额为负,会显示不出来。为适应负值情况,继续修改公式为:
=IF(A5=0,"",IF(A5>0,TEXT(INT(A5),"[dbnum2]¥G/通用格式")&"元"&IF(INT(A5*10)-INT(A5)*10=0,IF(INT(A5)*(INT(A5*100)-INT(A5*10)*10)=0,"","零"),TEXT(INT(A5*10)-INT(A5)*10,"[dbnum2]")&"角")&IF((INT(A5*100)-INT(A5*10)*10)=0,"整",TEXT((INT(ROUND(A5*100,0))-INT(A5*10)*10),"[dbnum2]")&"分"),(TEXT(INT(A5),"[dbnum2]¥G/通用格式")&"元"&IF(INT(A5*10)-INT(A5)*10=0,IF(INT(A5)*(INT(A5*100)-INT(A5*10)*10)=0,"","零"),TEXT(INT(A5*10)-INT(A5)*10,"[dbnum2]")&"角")&IF((INT(A5*100)-INT(A5*10)*10)=0,"整",TEXT((INT(ROUND(A5*100,0))-INT(A5*10)*10),"[dbnum2]")&"分"))))
天哪,这公式也忒长了吧,连复制都不想弄了。讲真,公式整到这个程度也难怪人不想用了,单单点击那些单元格就够麻烦的。
简单方案
为给大家提供一个简单的解决方法,本人编制了“金额汉字大写模块.bas”,通过插入模块引入自定义函数dxrmb(),函数名为大写人民币的拼音首字符,轻松解决数字变大写人民币金额。如下图:
C5单元格公式:="¥" & dxrmb(A5),用法非常简单。
我们在实际使用前,只需要知道如何将这个函数提前引入到表格就可以了。引入方法也很简单:
按上图,点击开发工具下的Visual Basic,调出MVB编辑框。点击文件——导入文件,选择“金额汉字大写模块.bas”打开,即完成引入。