程式碼部分。
Const column As String = "A,B,C,D" Sub 優化前程式碼() Dim t As Long t = Timer Sheets(1).Cells.Clear 亂數產生器 30000 方法2刪除不為1的row MsgBox "優化前的執行時間 " & Format(Timer - t, "0.00") & "秒" End Sub Sub 優化後程式碼() Dim t As Long t = Timer Sheets(1).Cells.Clear 亂數產生器 30000 方法1刪除不為1的row MsgBox "優化後的執行時間 " & Format(Timer - t, "0.00") & "秒" End Sub Sub 亂數產生器(n As Integer) Dim i As Integer, col Randomize For Each col In Split(column, ",") For i = 1 To n Sheets(1).Cells(i, col) = (Int(Rnd() * 100) + 1) Mod 4 Next Next End Sub Sub 方法1刪除不為1的row() With Sheets(1) If .AutoFilterMode Then .AutoFilterMode = False With .UsedRange .AutoFilter Field:=1, Criteria1:="<>1" '.AutoFilter Field:=.Cells(1, "A").column, Criteria1:="<>1" '可改寫成這行 .SpecialCells(xlCellTypeVisible).EntireRow.Delete End With .AutoFilterMode = False End With End Sub Sub 方法2刪除不為1的row() Dim i As Integer, count As Integer With Sheets(1) count = .Cells(65535, 1).End(xlUp).Row For i = count To 1 Step -1 If .Cells(i, 1) <> 1 Then .Cells(i, 1).EntireRow.Delete Next End With End Sub執行結果:
使用迴圈執行作為優化前。
使用篩選方式作為優化後。
由執行結果可看出,同樣的30000筆資料進行處理,用的方法不同時就能達到優化的效果,Excel VBA程式碼相關優化方法,可參考「Excel VBA 實戰技巧|金融數據x網路爬蟲」基礎篇 「05 Excel VBA 程式碼優化」中,優化技巧7、16、18、25、27的結合。
沒有留言:
張貼留言