我有一個宏,它將把列表中的每個值都放到不同的工作表(它執行自己的計算)並返回某些值(如彙總表)。我已經創建了一個循環宏來執行此操作,但由於列表中有大約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