昨日、ネットで拝借したコードの速度測定をしてみます。
Public StartTime As Double
Public EndTime As Double
Sub TimerStart()
StartTime = Timer
End Sub
Sub TimerStop()
EndTime = Timer
MsgBox (EndTime - StartTime & " 秒")
End Sub
Sub Add5000Lines()
Call TimerStart '---- 測定開始
For i = 1 To 5000
ActiveSheet.Shapes.AddLine(10, i, 100, i).Select
Next
Call TimerStop '---- 約0.38秒
End Sub
Sub DrawingObjectsDelete01()
Call TimerStart '---- 測定開始
ActiveSheet.DrawingObjects.Delete
Call TimerStop '---- 約0.12秒!!!
End Sub
Sub DrawingObjectsDelete02()
Call TimerStart '---- 測定開始
Set dr = ActiveSheet.DrawingObjects
For Each d In dr
d.Delete
Next
Set dr = Nothing
Call TimerStop '---- 約33秒
End Sub
まずは、Add5000Lines()でラインオブジェクトを5000本引きます。
その後に描画オブジェクトを削除するコード2種類について処理速度を比較しています。
DrawingObjectsDelete01()は高速ですが、非表示のオブジェクトを削除出来ません。
DrawingObjectsDelete02()は低速ですが、非表示のオブジェクトも削除してくれます。
つまり、昨日のコードはこの二つのコードの二段構えになっています。
素晴らしいです。
その後に描画オブジェクトを削除するコード2種類について処理速度を比較しています。
DrawingObjectsDelete01()は高速ですが、非表示のオブジェクトを削除出来ません。
DrawingObjectsDelete02()は低速ですが、非表示のオブジェクトも削除してくれます。
つまり、昨日のコードはこの二つのコードの二段構えになっています。
素晴らしいです。
0 件のコメント:
コメントを投稿