excel vba 在sheet多的时候运行特别慢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel vba 在sheet多的时候运行特别慢相关的知识,希望对你有一定的参考价值。

如题,只有四五个sheet时运行一次20S,有十几个sheet时运行一次3分钟,求解答

参考技术A 如果没有画面显示要求的话,你在程序入口处加上Application.ScreenUpdating=False,能提高很多。还有程序的写法与运算速度也有很大关系。。我写过一些程序,其中一个是计算10多个Sheet中,将近每页30*500个单元格有效数据,取出去做运算,才几秒钟就完成。你程序慢估计与你的程序有很大关系。

还有楼上的,以前我跟你们的认为是一样的,但是有一次我运行一个For循环,循环三十多万次,两三秒就完成了,后来我才发现优化代码的乐趣了。For循环其实比Find慢不了哪去,不是数量大的惊人的话~~~
参考技术B 这个怎么说呢,电脑的关系应该不是很大,当然配置牛的可能稍微好点,你的这个问题应该主要存在你的vba代码里,尤其是你的循环里面,循环里面for each这些肯定比你一个单独的for来的快,还有用find也比for来的快,尤其是如果有多重循环,建议用find,最外围的用for这样速度提升很快 参考技术C 和vba没关系吧
可能你修改了某些公式或者公式引用的值,公式会自动重算的,十几个sheet,自动重算的时间自然要久,如果表格的内容都是数字或文本,肯定没有影响的。

当让,你过你的代码有遍历工作表的话,也是要时间久的。

如下VBA代码 在EXCEL运行时非常慢,有哪位大侠能帮忙解决优化一下。

如下VBA代码 在EXCEL运行时非常慢,有哪位大侠能帮忙解决优化一下。
数据表在如下地址http://pan.baidu.com/s/1nt3eGQH

Sub 成品库存更新表编码自动填充()
Dim rs As Integer
rs = 3 '从第几行开始计算
Do Until Sheet11.Range("b" & rs) = ""
Range("m" & rs).Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-11],编码对照!C[-10]:C[-7],4,0)"
rs = rs + 1
Loop
Sheet11.Range("m3:m" & rs).Select
Selection.Copy '复制选择单元格
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

参考技术A 就是去另外一个工作薄查询一下对应的编码写入而已,你这样写代码,整个过程不断来回操作两个工作薄,不慢才怪,
建议你用字典,一次读入整个编码对照工作表的相应列,之后,用数组存储对应的值,再写入这个工作表.
这样应该会快很多
参考技术B Range("m" & rs).Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-11],编码对照!C[-10]:C[-7],4,0)"
前面两名改为
Range("m" & rs).FormulaR1C1 = "=VLOOKUP(RC[-11],编码对照!C[-10]:C[-7],4,0)"
然为可以关闭公式自动计算。应该很快的追问

运行了一下,还是比较忙,2秒才3个单元格的进度。

本回答被提问者采纳
参考技术C Do loop 那段应该用几行搞定,先确定区域,然后区域填充。你录制宏,自己改一下。

以上是关于excel vba 在sheet多的时候运行特别慢的主要内容,如果未能解决你的问题,请参考以下文章

Excel vba运行太慢怎么提速运行的快些?

vba程序从excel表格读取数据(数据量=2000行),程序运行时特别慢,怎么解决?

Excel VBA运行越来越慢,怎么提速

用Excel使用VBA时显示运行错误5,错误调用参数,程序特别简单,如图,求问哪里出错了

求解!Excel的VBA一开始运行时间大概在5秒左右吧,但是今天突然变成5分钟了!求大神救命!!

使用 Excel VBA 实现复制 粘贴 和保存,并自动运行VBA