2017-06-17 60 views
1

我制作了一个宏,这也许是我做过的最简单的一个宏,但它需要运行将近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公式。

有人可以建议一个比这更好的方法吗?

+0

Sheet C是否有很多公式? –

+0

@GowthamShiva是的。它有。我将表B中的值插入到表A中,然后将答案从表C中复制到表B中。对于单个值,它以jiffy完成。但是,当我运行多个值的循环。这需要时间。 – Ahmad

+0

而不是计算整个图表C,只需计算您需要的单元格/范围。可能b B1在单C中 –

回答

0

我还面临着需要复制大量单元的情况,并且每个单元的“=”都被证明太慢。对我来说PasteSpecial Paste:=xlPasteValues解决了这个问题 - 不知道它是否适用于你的情况。尽管,范围=小区,例如Range(Cells(2, 3), Cells(10000, 3)) = Cells(1, 3)应该同样快。

此外,您可能会考虑使用像Sheets(1).Cells(7, 2)而不是Sheets("A").Range("b7")作为“微速优化”的问题。

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

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