ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 29073|回复: 18

[原创] 个人认为目前最完美的人民币大写公式和自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-4-22 00:40 | 显示全部楼层 |阅读模式
关于人民币大写的问题,有很多帖子,也试过好多其中介绍的多种方法,总有自己感觉不太满意的地方或错误,经认真测试、查错和简化,特编写以下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,,"零")),"零分",""))

人民币大写转换公式和VBA函数.rar

8.96 KB, 下载次数: 808

人民币大写转换公式和VBA函数示例

TA的精华主题

TA的得分主题

发表于 2010-4-22 01:22 | 显示全部楼层
5年前能写出这样的代码那当然好.可是现在不敢恭维.

TA的精华主题

TA的得分主题

发表于 2010-4-22 01:26 | 显示全部楼层
本帖最后由 wshcw 于 2012-3-20 15:25 编辑

[分享]人民币大写函数TEXT终极版 1行(136字符)80楼更精彩.

[ 本帖最后由 wshcw 于 2010-4-22 01:40 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-22 13:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 wshcw 于 2010-4-22 01:26 发表
[分享]人民币大写函数TEXT终极版 1行(136字符)
84楼更精彩.
QUOTE:
Function dx(M)
    dx = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Application.Text(Format(M, ".012034;;0"), "[=]g;[DBnum2]"), "叁肆", "分"), "壹贰", "角"), "零分", "整"), "零角", "零"), "零.零", a), "零.", a), "零整", "整"), ".", "元")
   '214字符 无缺陷 负数显示 “-”   -伍圆陆角伍分  写法A :圆角间 无零,如需显示“负”则要增加一个replace(.....,"-","负") 的嵌套
End Function

QUOTE:
Function dx(M)
    dx = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Application.Text(Format(M, ".012034;;0"), "[=]g;[DBnum2]"), ".", "元零"), "叁肆", "分"), "壹贰", "角"), "零分", "整"), "零角", a), "零元零", a), "零元", a), "零整", "整")
   '213字符 无缺陷 负数显示 “-”   -伍圆零陆角伍分  写法B: 圆角间 有零
End Function

经测试,用上所述84楼的2条所谓无缺陷的公式还是有缺陷:
36465.092 显示为:叁万陆仟肆佰陆拾伍元零玖叁叁玖玖玖玖
1234567890123.12 显示为:壹兆贰仟叁佰肆拾伍亿陆仟柒佰捌拾玖万零壹佰贰拾叁元壹壹

TA的精华主题

TA的得分主题

发表于 2012-3-20 15:20 | 显示全部楼层
本帖最后由 wshcw 于 2012-3-20 15:26 编辑

[分享]人民币大写函数TEXT终极版 1行(136字符)80楼更精彩.
163个字符(使用EXCEL2010正常):
Function dx(M)
     dx = Replace(Replace(Replace(Join(Application.Text(Split(Format(M, " 0. 0 0;负 0. 0 0;   ")), ["[DBnum2]"&{0,"","圆0角;;圆零","0分;;整"}]), a), "零圆零", a), "零圆", a), "零整", "整")
   '163字符A 无缺陷 负数显示 “负”   负伍圆陆角伍分  
End Function

TA的精华主题

TA的得分主题

发表于 2012-6-11 18:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-6-18 17:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-6-19 22:27 | 显示全部楼层
不错哦,加上人民币标还好点

TA的精华主题

TA的得分主题

发表于 2014-3-28 22:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-12-4 22:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好好学习一下:) 很实用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-3 07:57 , Processed in 0.041429 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表