ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]我参与18期竞赛题后写的一个编程经验总结

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-12-21 22:56 | 显示全部楼层 |阅读模式

这个题目是论坛第18期的VBA正式竞赛题目,谢谢northwolves版主的好题目!从终稿到终稿5,我共用了5种编程方式,回过头来看,终稿5与终稿相比,运算速度快得连我自已都不可想象,终稿运行14个1的连续数花了近26分钟,而用终稿5只需1秒种,并且在测试23个1的连续数所花的时间由原来终稿2的6分38秒减少到2分02秒。由此可以看出,在算法(主要思路)相同的情况下,运用不同的对象来编写程序,对处理多数据量的情况,程序执行的效果是不同的。我对5种编程方式一一作了测试。由于题目要求的是随机数,故出现包含3个以个1或2的连续数机率很小,即结果个数很少,所以用随机数是测不出结果的。我是用手工输入连续多个1这种数据来测试的,测试具体结果可见下表。另外每一个答案都写有我当时的编程想法,在这里与大家分享一下本次在处理大数据量时我的编程经验,大家如果能从初稿按顺序看下去,就能明白我下面写的几点经验了:
    1、尽量用集合处理有排除重复值要求的数据;
    2、尽量不要把结果直接赋值给单元格,可先把结果暂存于数组中,最后对单元格批量赋值;
    3、尽量减少不必要的数据传输,尽管它是集合或数组中的数据;
    4、尽量减少循环次数,对一些已经肯定没有作用的后续循环,可以加一个判断语句来跳出当前循环,不要小看循环中每个数据的每次计算,例如数据中有1万个数据在循环里可省1次循环,若在它之后面有2句必做代码的话,就可以省2万次的计算量。
    5、另外在代码里可以把工作表的重新计算方式改为手动重算方式,我进行过少量测试,运行效率可提高千分之一左右。
                                                                                                                                                                            2006-12-21

   再次震惊:写完上面的经验后,当我用以上经验再次查看终稿5的代码,居然发现了一条"时间隧道",测试23个1的连续数只花18秒!乖乖,我作了回终结者!大家不防先不要看终稿6的代码,看你在终稿5中能找到这个时间隧道吗? 

TfXYBOPp.rar (45.76 KB, 下载次数: 86)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-12-21 23:10 | 显示全部楼层
楼主精神真让我感动...有时间时仔细看看

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2006-12-22 08:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-12-25 12:41 | 显示全部楼层

我把我的递归方法改了一下, 用上了数组, 速度也快了很多, 23个1大概两到三秒.

gcVHwcAn.zip (12.41 KB, 下载次数: 25)


TA的精华主题

TA的得分主题

发表于 2006-12-25 13:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

试试这个.

不过我这个只能执行到22个1,多了会溢出.但是速度好象还要快一点^^

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-25 19:37 | 显示全部楼层
QUOTE:
以下是引用winland在2006-12-25 12:41:44的发言:

我把我的递归方法改了一下, 用上了数组, 速度也快了很多, 23个1大概两到三秒.

速度确是很快,winland兄的思路很好,学习了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-25 19:38 | 显示全部楼层
QUOTE:
以下是引用byyourside在2006-12-25 13:59:25的发言:

试试这个.

不过我这个只能执行到22个1,多了会溢出.但是速度好象还要快一点^^

速度方面不算很快,但是对解此题来说也是一个很好思路,谢谢byyourside兄分享。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-12-25 21:32 | 显示全部楼层
QUOTE:
以下是引用winland在2006-12-25 12:41:44的发言:

我把我的递归方法改了一下, 用上了数组, 速度也快了很多, 23个1大概两到三秒.


速度确实快,不错,看来用空间确实能节省一些时间

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-1 17:49 , Processed in 0.047346 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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