计算包含公式的工作表时的慢速宏

时间:2017-06-17 17:14:51

标签: excel vba excel-vba

我制作了一个可能是我做过的最简单的宏,但运行需要5到8分钟。我究竟做错了什么?什么方法可以缩短运行时间?我不能一次又一次地等待它完成。这是代码。

Sub AB()

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual

For i = 2 To 20
For y = 4 To 50

Sheets("A").Range("b7").Value = Sheets("B").Cells(y, 1).Value
Sheets("A").Range("b8").Value = Sheets("B").Cells(3, i).Value
Sheets("C").Calculate
Sheets("B").Cells(y, i).Value = Sheets("C").Range("b1").Value

Next y
Next i

Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic

End Sub

我必须在表C中包含“计算”,因为表C包含Excel公式。

有人可以提出比这更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我还面临着需要复制大量细胞并且每个细胞的“=”被证明太慢的情况。对我来说PasteSpecial Paste:=xlPasteValues解决了这个问题 - 不确定它是否适用于您的情况。但是,range = cell,例如Range(Cells(2, 3), Cells(10000, 3)) = Cells(1, 3)应该同样快速地工作。

另外,您可以考虑使用Sheets(1).Cells(7, 2)代替Sheets("A").Range("b7")作为“微速度优化”的问题。

要考虑的另一个方面是尽可能多地使用数组(用于临时值)并写入单元格,仅用于最终输出。

最后,值得研究this article因为我们经常忽略代码中某些会降低运行时性能的方面。