ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ldy888

[原创]最简短的人民币大写自定函数(11行),附由浅到更浅解说

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-2 16:37 | 显示全部楼层

楼主的代码输入0.10转换为零元壹角整

这个改起来很容易,行数不变,特意让想学的新手试试地

a = Application.Text(y, "[DBNum2]")
d = "元"
这两行加个 IF 判断就行了,实用方面,这原是打支票用的,

而支票金额小于1元不受理,所以没必要。要改也只能是精益求精了。

建议新手动手试试,这样更易掌握。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-2 17:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

在论坛找到这个代码,只有10行,精简!虽然不认负数,金额也有限制。但所用语句比我的高明,适用的方向很广。有很多地方不懂。求高手指点,最好能像我那样做 由浅向更浅 的说明。多谢了。

为方便区分学习,把原宏名Ntoc 改为 rmbn

Function rmbn(n) 'n as single
'原创 渴死的鱼 hanlin2020@hotmail.com
'改编 inRm inrm@263.net
Const cNum = "零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分"
Const cCha = "零仟零佰零拾零零零零零亿零万零元亿万零角零分零整-零零零零零亿万元亿零整整"
rmbn = ""
sNum = Trim(Str(Round(n, 2) * 100)) '在这里用Round()四舍五入
For i = 1 To Len(sNum) '逐位转换
rmbn = rmbn + Mid(cNum, (Mid(sNum, i, 1)) + 1, 1) + Mid(cNum, 26 - Len(sNum) + i, 1)
Next
For i = 0 To 11 '去掉多余的零
rmbn = Replace(rmbn, Mid(cCha, i * 2 + 1, 2), Mid(cCha, i + 26, 1))
Next
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-2 17:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下是引用[I]northwolves[/I]在2006-1-2 14:47:55的发言:[BR]y = Int(Abs(M))
j = int(Abs(M)*10 mod 10)
f = int(Abs(M)*100 mod 10)
照你的改法不行,结果:123.36 壹佰贰拾叁元零陆分 不过谢谢你,让我知道了 MOD 的用法。不用奇怪,我是新手,有很多语句我不懂。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-3 00:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看了一天终于看懂了,还可以改成这样,增加了负数识别 以12034.00为例 Function ldy(n) aa = "零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分" bb = "零仟零佰零拾零零零零零亿零万零元亿万零角零分零整-零零零零零亿万元亿零整整" cc = Round(Abs(n), 2) * 100 '在这里用Round()四舍五入 1203400 7位 If n < 0 Then ldy = "负" For i = 1 To Len(cc) '逐位转换 n的位数 7位 ldy = ldy + Mid(aa, (Mid(cc, i, 1)) + 1, 1) + Mid(aa, 26 - Len(cc) + i, 1) ' 1203400的第1 个数 1+1=2 aa的第二个字 壹 'aa的第26-7+1=20个字 万合起来是 壹万 ' 循环7次 壹万贰仟零佰叁拾肆元零角零分 Next For i = 0 To 11 '去掉多余的零 ldy = Replace(ldy, Mid(bb, i * 2 + 1, 2), Mid(bb, i + 26, 1)) '在ldy=壹万贰仟零佰叁拾肆元零角零分 要换掉的字:bb中的 第1组2个字 零仟 ' 要换进去的字:bb中的 第26个字 零 '在此例中第1 次循环 没有 零仟 ldy 还是 壹万贰仟零佰叁拾肆元零角零分 进入下一循环,共12次 '第2 次循环 : 找 零佰 然后 用 bb 中的 第27(26+1)个字 零 替换 ' ldy = 壹万贰仟零叁拾肆元零角零分 零佰 变成了零 '以些类推:用 零 换 零拾 ,用 零 换 零零 。。。。。。用亿换零亿。。。。最后用 整 换 零整 找不到的就不变 ''最后ldy = 壹万贰仟零叁拾肆元整 'aa bb 中的 “-” 没有实际意义,只是在编程过程中,便于查看,可以删除,但是两个循环中的 26 要改成25 Next End Function
[此贴子已经被作者于2006-1-3 2:00:34编辑过]

TA的精华主题

TA的得分主题

发表于 2006-1-3 08:20 | 显示全部楼层

试试这个1000.10,好像有问题.显示为:壹仟元壹角整.好像正确的显示应该:壹仟元零壹角整.

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-3 16:05 | 显示全部楼层

这不是问题,我开支票都是这样开的,银行也是这样开的

开成你那样也对,习惯而已,想依你的习惯改也很容易

TA的精华主题

TA的得分主题

发表于 2006-1-21 23:49 | 显示全部楼层
100.50,好像有问题.显示为:壹佰元伍角整.好像正确的显示应该:壹佰元零伍角整.能写成壹佰元零伍角整,这样的吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-22 15:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
壹佰元伍角整 是标准写法

TA的精华主题

TA的得分主题

发表于 2006-5-19 17:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-5-20 19:24 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-21 03:57 , Processed in 0.040434 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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