程式碼部分。
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的結合。



沒有留言:
張貼留言