Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: jkczfpb

[已解决]优化代码

  [复制链接]
发表于 2011-12-29 13:02 | 显示全部楼层
还是 给个模拟数据和你想实现的那个功能块,再由大家的提供思路,从中找出优化的要好点
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2011-12-29 13:15 | 显示全部楼层
吕?布 发表于 2011-12-29 11:46
试试这样呢
Sub tt()
    For i = 1 To UBound(niV)

你更夸张,循环每一个量,并且用该量循环对比所有的因数,这个循环次数是多少了?想都不敢想

点评

你可以试一下啊,太差劲的话我也不会拿出来出丑了  发表于 2011-12-29 13:19
回复

使用道具 举报

发表于 2011-12-29 13:23 | 显示全部楼层
当然,因为没有数据,所以代码很大一部分是猜测做的

点评

原理是一样的,我刚才试了这种方式,快的不是一点点,我也知道这样的用法,但是不敢在这用,因为我的方法只需要循环一次,而你的方法需要循环因数个数次,有5万条数据就要循环5万次,为什么比循环一次还快呢?  发表于 2011-12-29 13:32
回复

使用道具 举报

发表于 2011-12-29 13:29 | 显示全部楼层
Filter等是很耗时的,在某些情况下可能远慢于循环判断
回复

使用道具 举报

 楼主| 发表于 2011-12-29 13:36 | 显示全部楼层
吕?布 发表于 2011-12-29 13:23
当然,因为没有数据,所以代码很大一部分是猜测做的

我用到了两种方法,一种是数组分离,一种是工作表函数,最后选择了数组分离,你用的是自定义函数,函数中镶嵌了逐个循环比较,这样的方式代表着循环次数无限增加,为什么速度确快了?
回复

使用道具 举报

 楼主| 发表于 2011-12-29 13:38 | 显示全部楼层
青城山苦丁茶 发表于 2011-12-29 13:29
Filter等是很耗时的,在某些情况下可能远慢于循环判断

那为什么工作表数组函数也慢呢?不能用COUNTIF 函数,它不能对18位数的身份证进行计数
回复

使用道具 举报

发表于 2011-12-29 13:39 | 显示全部楼层
青城山苦丁茶 发表于 2011-12-29 13:29
Filter等是很耗时的,在某些情况下可能远慢于循环判断

没错。

单纯的循环,不要说5万次,就是500万次,也是用不了多长时间的。


而如果你使用某些Excel自带功能的话,从代码上看,是很简洁,一次性得到结果了。

但是,实际上那些功能,也还是在后台进行着不断地循环比对……

换汤不换药,你是自欺欺人罢了。



…………

所以,把你的目的、算法公开,让别人帮助你整体改换算法思路,才是正解。


否则,只允许别人看你指定的几句代码,是没有用的。


呵呵。


回复

使用道具 举报

发表于 2011-12-29 13:40 | 显示全部楼层
jkczfpb版主,能上传下你的附件吗?(如果需要,用别的字符替换掉真实数据)

深深的感受不到高手的讨论什么{:311:}
回复

使用道具 举报

发表于 2011-12-29 13:41 | 显示全部楼层
快与慢也许不是楼主想到的那样,如果你全部知道原因,便不会到这里来求解
我只敢说据我的理解:
Filter虽然只做了一次,但这一次就很花时间,他要遍历整个数组(虽然你没做,但电脑自动做),我想到的是发现有重复的就不再循环
回复

使用道具 举报

发表于 2011-12-29 13:44 | 显示全部楼层
偷偷围观下各位高手...
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-9 14:56 , Processed in 0.281478 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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