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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如下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 运行速度慢

For i = 1 To number
For j = 1 To 31

Sheets("ABS").Cells(i, j + 1).Value =
Workbooks(getfilename).Sheets(orgsheet).Cells(i * 15 - 9, 8 + j).Value + _
Workbooks(getfilename).Sheets(orgsheet).Cells(i * 15 + 3, 8 + j).Value

Next j
Next i

上面的代码运行时间很长,如果nubmer= 18,差不多8秒才能完成,有没有更快的写法?

参考技术A 1、使用application.screenupdate,先关闭屏幕更新,结束时打开;使用application.EnableEvents,先关闭事件的触发,结束时再打开2、楼上金融系统说的很好,使用SpecialCells选择方法,可以剔除许多不需要的数据3、尽量少使用单元格直接参与计算,多使用变量和数组变量,先将数据读入变量或数组变量,对变量进行运算4、将单元格区域分块,比如,可以先读取一列,复制给数组,处理完了,再将数组的值一次性赋值给其他单元格,然后再将下一列读到这个数组……5、尽量减少代码中的select、activate、等没什么用的动作,直接使用“.”点符号取值或赋值6、尽量使用with语句,减少对象的读取动作7、暂时想到这么多,……最重要的一点:优化算法,减少循环次数,这就得看你的具体操作是什么了……这都是我的经验啊,何况打了这么多字,楼主不但要采纳,还得加分啊~~~本回答被提问者采纳

以上是关于如下VBA代码 在EXCEL运行时非常慢,有哪位大侠能帮忙解决优化一下。的主要内容,如果未能解决你的问题,请参考以下文章

在Excel中使用VBA循环复选框非常慢

利用VBA向excel表格中写入数据后,再次运行程序的话写入速度会非常慢

excel vba 运行速度慢

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

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

求助!请教VBA高手! 有没有哪位高手有编制过调用翻译软件实现在excel中,英文译成中文的?