我有一个宏,它将把列表中的每个值都放到不同的工作表(它执行自己的计算)并返回某些值(如汇总表)。我已经创建了一个循环宏来执行此操作,但由于列表中有大约6500个条目,因此宏执行速度非常缓慢。我关闭了屏幕更新,并且计算必须是自动的,所以我想知道:还有其他方法来加速宏吗?有什么办法可以加快我的宏吗?
Sub watchlist_updated()
Application.ScreenUpdating = False
Range("A10").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Range("B10:Q10").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Sheets("Analysis").Select
Range("C5:D5").ClearContents
Range("N6").Select
ActiveCell.FormulaR1C1 = "Yes"
Sheets("Selected Data").Select
Range("C6").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Watchlist").Select
Range("A10").Select
ActiveSheet.Paste
countermax = Selection.Count
Range("A10").Select
counter = 1
Do Until ActiveCell = ""
sStatus = Format(counter/countermax, "0.0%") & " Complete"
Application.StatusBar = sStatus
Sheets("Analysis").Range("C5") = ActiveCell.Value
Dim array1(16)
Dim myrange As Range
Set myrange = Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 16))
array1(0) = Sheets("Analysis").Range("F5").Value
array1(1) = Sheets("Analysis").Range("C20").Value
array1(2) = Sheets("Analysis").Range("J2").Value
array1(3) = Sheets("Analysis").Range("B8").Value
array1(4) = Sheets("Analysis").Range("J13").Value
array1(5) = Sheets("Analysis").Range("R13").Value
array1(6) = Sheets("Analysis").Range("C21").Value
array1(7) = Sheets("Analysis").Range("B11").Value
array1(8) = Sheets("Analysis").Range("V5").Value
array1(9) = Sheets("Analysis").Range("B12").Value
array1(10) = Sheets("Analysis").Range("J6").Value
array1(11) = Sheets("Analysis").Range("B9").Value
array1(12) = Sheets("Analysis").Range("N20").Value
array1(13) = Sheets("Analysis").Range("H23").Value
array1(14) = Sheets("Analysis").Range("F23").Value
array1(15) = Sheets("Analysis").Range("D23").Value
myrange = array1
ActiveCell.Offset(1, 0).Select
counter = counter + 1
Loop
Application.StatusBar = False
Sheets("Analysis").Select
Range("N6").Select
ActiveCell.FormulaR1C1 = "No"
Sheets("Watchlist").Select
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
首先,检查** [this](http://stackoverflow.com/a/10717999/2687063)** –
两个变化:'' 1'消除所有的'Select','Selection'语句。 '2'如果你正在移动数据或公式的结果,而不是实际的公式,只需一步将所有数据读入VBA数组:例如'V = Range(“B5:V23”)',然后移动将新数组array1(0)= v(1,5)'中的特定单元格放入F5中的内容到array1(0)中;等等。然后将数组读回到工作表'myrange = array1'根据我的经验,在VBA中使用数组可以提供比原来工作表更多的速度提升10倍。 –
感谢您的提示!我没有想到这样做,但它肯定有助于提高我的宏的速度! – clysaght62