|
关于人民币大写的问题,有很多帖子,也试过好多其中介绍的多种方法,总有自己感觉不太满意的地方或错误,经认真测试、查错和简化,特编写以下VBA函数,自我感觉特别好,特此分享,如有不足之处,请大家批评指正,欢迎互相讨论。谢谢!
注意:
1、函数和公式的“元”均是用“圆”字,如需用“元”,请自行修改即可。
2、负数均是在前面增加“负”字,如习惯用“-”,请自行把“负”改为“-”即可,或删除相应代码。
3、取数字时,均采取保留2位小数后再进行处理的办法。
4、VBA函数基本都有注释,应该比较容易理解吧?!
一、自定义VBA函数:
Function RMBdx(Optional Mynum As Variant)
'原创:生哥
'来源:www.vip968.com 七彩阳光
'功能:根据数值返回人民币的大写金额。
If IsNumeric(Mynum) = False Then 'IsNumeric() 判断是否为数字
Mynum = 0
End If
Mynum = Round(Mynum, 2) '将数字保留2位小数
If Sgn(Mynum) = 0 Then '判断数字是否为负数,=1为正,=0为零,=-1为负
RMBdx = "" '数字为0,则不显示,如需显示其它信息,请自行修改,如改为 RMBdx = "零圆"
Else
RMBdx = IIf(Sgn(Mynum) = -1, "负", "") & Application.Text(Int(Abs(Mynum)), "[=]g;[dbnum2]") & "圆" '若为负数,则在前加“负”字
If Abs(Mynum) - Int(Abs(Mynum)) > 0 Then '判断数字是否为带小数点
RMBdx = RMBdx & Application.Text(Right(Format(Abs(Mynum) - Int(Abs(Mynum)), "0.00"), 2), "[=]g;[dbnum2]0角0分") '转换小数点后数字
RMBdx = Replace(Replace(RMBdx, "零分", ""), "零角", "零") '如出现“零角”则替换为“零”,如出现“零分”则清除,如需显示“角整”则使用下边一行。
'RMBdx = Replace(Replace(RMBdx, "零分", "整"), "零角", "零") '如出现“零角”则替换为“零”,如出现“零分”则清除,如需显示“角整”则使用本行。
Else
RMBdx = RMBdx & "整"
End If
End If
End Function
二、直接使用公式的最简单方法:
1、显示“角整”
如“10.20元”显示为“壹拾圆贰角整”
=IF(ROUND(A1,2)=0,"",IF(A1<0,"负","")&IF(ABS(A1)>=1,TEXT(INT(ROUND(ABS(A1),2)),"[dbnum2]")&"圆","")&SUBSTITUTE(SUBSTITUTE(TEXT(RIGHT(RMB(A1,2),2),"[dbnum2]0角0分;;整"),"零角",IF(A1^2<1,,"零")),"零分","整"))
2、不显示“角整”
如“10.20元”显示为“壹拾圆贰角”
=IF(ROUND(A1,2)=0,"",IF(A1<0,"负","")&IF(ABS(A1)>=1,TEXT(INT(ROUND(ABS(A1),2)),"[dbnum2]")&"圆","")&SUBSTITUTE(SUBSTITUTE(TEXT(RIGHT(RMB(A1,2),2),"[dbnum2]0角0分;;整"),"零角",IF(A1^2<1,,"零")),"零分","")) |
|