|
原帖由 terqm 于 2010-11-1 19:44 发表
看不明白,但可以肯定,这样写的代码绝对很慢,VBA快事因为可以直接处理数据.....你这样写会导致EXCEL不断的重算.和不断地读取某一单元格,而且居然要循环1200000次.能快才怪.
如你所言,楼主的主要问题是循环次数太多,而且每次循环都读写大量单元格
其实楼主并没有做120万次循环,而且120万次循环对如今的电脑来说也就一秒钟的事情,关键还是要减少读写单元格的次数, 少一次读写,就快50%
另外,最重要的是,把循环的步长加大,基本上加大100倍,就会快100倍
附件1秒之内完成。
其实我在上面的链接,其处理手法更加合理,避免了加大步长的漏算。
因为现在的办法类似于工作表迭代,不断地增加写入单元格的值,公式计算结果,读取公式的结果
这样每次循环读写一次,已经不可能优化了
可以优化的只是降低循环的次数,但这样一来,有可能漏算某些值
如步长为1000,那么100000直接就到101000,100001到100999的值全部没有计算
而且到了最后的一步,假设是100500的总收入
那么实际上只计算了100000的所得税,要是100500刚好跨了税率区间,那么就可能不对了.
实际上,楼上附件算50500的话,两个最优值是不一致的
因为加大第二次循环的步长,等于是每月工资只能取某些值的倍数,那么就一定不会是最优值,不懂楼主为什么要算两次。
而这个第二次循环,跟第一次唯一差异就是每月工资要取整数。
[ 本帖最后由 灰袍法师 于 2010-11-1 20:30 编辑 ] |
|