ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[挑战]功能最全、最短(7行)的人民币大写函数

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2006-5-11 09:51 | 显示全部楼层
提点意见:楼主为了追求代码行少,函数中未显式定义变量类型,这显然降低此函数的性能。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-12 04:29 | 显示全部楼层

谢谢楼上的.如果仅此一点.那它就是完美的.

因为huyongapple兄所担心的情况不会出现,相反还会快上一点点.

虽然我对定义变量类型所知不多,但我会瞎整,拿别人的有定义变量类型的程序,

去掉定义变量类型,再分别FOR它一千几百次,比较时间发现,长语句多循环的程序,定义变量类型是要快一些.

对于只有几行并没有循环的短程序,定义变量类型就多于了.

引用兰老师的话:

DIM 变量名称 AS 变量类型

是声名变量用的 就象是平时别人给你介绍客人:他是干什么的,只是介绍了我们才能针对性的谈话。变量也一样,我们给程序介绍:这个是整数型,你没必要把他当作其他类型对待,这样系统对你声明的变量作整数型对待了,如果不介绍系统还要花费一定的内存去判断新出现的变量是什么?结果是多占用内存影响运算速度.

我引申发挥一下:如果客人是来谈大生意的或是来谈婚论嫁的,那这个介绍是必须的,越详细越好.

但如果这个客人是来送盒饭的......边上跟个介绍人:这是我们饭店最好的送餐员,上8楼30秒不带喘气的...........不管你是觉得有趣还是觉得烦,我决不会多给钱,虽然早间不长,但影响了我吃饭的速度.

不知你们那送盒饭的是不是要介绍,反正我们这是一见面就说:5块.然后收钱走人.一个字:快!

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-12 04:45 | 显示全部楼层
P7m6Iy71.rar (8.2 KB, 下载次数: 120) 用兰老师教学版上的某学生编的有DIM的小程序做试验,发个文件上来, 加了个计时器,FOR了1000次,有定义的27秒,无定义的有时26有时27秒, 看来要5000次以上才能分出快慢来.次数在H2格直接修改. 谁有时间FOR它10000次看看.我敢打赌,不相上下. 机子不好的就少FOR点.
[此贴子已经被作者于2006-5-12 4:51:47编辑过]

TA的精华主题

TA的得分主题

发表于 2006-5-12 08:00 | 显示全部楼层

看了最后的关于定义变量类型的讨论,觉得 huyongapple 的提议是中肯的,我也持这个意见。

ldy888 的比喻很有趣,但是在他的实验中,也能看出有没有定义是不影响代码运行速度的。那么,我认为,尽量应该将定义写出来,而且最好是有注释。

当然,这是个人习惯。

TA的精华主题

TA的得分主题

发表于 2006-5-12 21:27 | 显示全部楼层

ldy888兄,我佩服你啊.把定义不定义变量的速度都做了如此细致的比较.牛!!

以后我也难道定义了.多此一举!

TA的精华主题

TA的得分主题

发表于 2006-5-14 11:46 | 显示全部楼层

定义变量是一个好的编程习惯。当然,几行代码的话定不定义都没所谓~

TA的精华主题

TA的得分主题

发表于 2006-5-14 21:34 | 显示全部楼层

受启发写了一个,欢迎指正!

Public Function dx(n)
dx = Replace(Application.Text(Round(n+0.00000001, 2), "[DBnum2]"), ".", "元")
dx = IIf(Left(Right(dx, 3), 1) = "元", Left(dx, Len(dx) - 1) & "角" & Right(dx, 1) & "分", IIf(Left(Right(dx, 2), 1) = "元", dx & "角整", IIf(dx = "零", "", dx & "元整")))
dx = Replace(Replace(Replace(Replace(dx, "零元零角", ""), "零元", ""), "零角", "零"), "-", "负")
End Function

[此贴子已经被作者于2006-5-15 8:55:22编辑过]

TA的精华主题

TA的得分主题

发表于 2006-5-14 22:02 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-15 14:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
[em04]
[此贴子已经被作者于2007-3-8 17:41:47编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-15 14:36 | 显示全部楼层
以下是引用[I]gly1126[/I]在2006-5-14 21:34:56的发言:[BR]

受启发写了一个,欢迎指正!

Public Function dx(n)
dx = Replace(Application.Text(Round(n+0.00000001, 2), "[DBnum2]"), ".", "元")
dx = IIf(Left(Right(dx, 3), 1) = "元", Left(dx, Len(dx) - 1) & "角" & Right(dx, 1) & "分", IIf(Left(Right(dx, 2), 1) = "元", dx & "角整", IIf(dx = "零", "", dx & "元整")))
dx = Replace(Replace(Replace(Replace(dx, "零元零角", ""), "零元", ""), "零角", "零"), "-", "负")
End Function

抛了半年的砖,终于引出这块玉!!!谢谢兄弟! 回家慢慢研究.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 14:51 , Processed in 0.048786 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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