[move]37楼的楼的兄弟做了个更好的,3行! 研究中....... ldy888 2006-5-15[/move]
元旦那天做了一个11行的,自认为不能再短了,没想到又找到了一个10 行的。
不甘心,又精研了一天,终于做出这个目前 最全面、最短的人民币大写函数,只有7行
哇哈哈哈,我快能的不行了
宏名特意以我的网名命名。 在此和各位高人比,看谁能做出比我更好的,或指出我的错处。
功能介绍:1.无金额限制,EXCEL认多大的数,它就认多大。
2.分以下四舍五入,数字< 0.005 (半分钱),做0处理,不显示
3.数字为负数 大写前+负
4.错误率低,目前还没发现
说明:程序中有一处是+0.00001的地方,不是多于,如果去掉,有时会产生1分或1 角的误差,这是EXCEL的问题
去掉后 试试 这个数 338600.525 不是四舍五入了 是五舍六入了 不符合财会制度。
Function ldy888(M) y = Int(Round(100 * Abs(M)) / 100) j = Round(100 * Abs(M) + 0.00001) - y * 100 f = (j / 10 - Int(j / 10)) * 10 A = IIf(y < 1, "", Application.Text(y, "[DBNum2]") & "元") b = IIf(j > 9.5, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(y < 1, "", IIf(f > 1, "零", ""))) c = IIf(f < 1, "整", Application.Text(Round(f, 0), "[DBNum2]") & "分") ldy888 = IIf(Abs(M) < 0.005, "", IIf(M < 0, "负" & A & b & c, A & b & c)) End Function 现在好了
06-5-10更新:
19楼的朋友说1.51有错,
不仅是1.51 但凡尾数是.41,.51.61,.71,.81,91 的都有这个情况.
这是个EXCEL的BUG,中断程序检查,发现51/10 居然= 5.999999999999999999
只好把分位ROUND一下了,这样就解决了.对19楼的朋友表示感谢.
修改如下,发现错误请跟帖,万二分感谢.
Function ldy888(M) y = Int(Round(100 * Abs(M)) / 100) j = Round(100 * Abs(M) + 0.00001) - y * 100 f = Round((j / 10 - Int(j / 10)) * 10) A = IIf(y < 1, "", Application.Text(y, "[DBNum2]") & "元") b = IIf(j > 9.4, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(y < 1, "", IIf(f > 0.4, "零", ""))) c = IIf(f < 1, "整", Application.Text(Round(f, 0), "[DBNum2]") & "分") ldy888 = IIf(Abs(M) < 0.005, "", IIf(M < 0, "负" & A & b & c, A & b & c)) End Function
LDY888 06-5-10
附:11行的帖子
http://club.excelhome.net/dispbbs.asp?BoardID=2&ID=143657&replyID=&skin=0
不知道怎么回事,有一行显不出来 现在好了
感谢总版抬爱!
ldy888 2006-6-12
[此贴子已经被作者于2006-6-12 15:27:17编辑过] |