2010年6月5日土曜日

【Excel】描画オブジェクトの全削除(速度測定)【VBA】

 昨日、ネットで拝借したコードの速度測定をしてみます。
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()は低速ですが、非表示のオブジェクトも削除してくれます。
 つまり、昨日のコードはこの二つのコードの二段構えになっています。
 素晴らしいです。

0 件のコメント:

コメントを投稿