機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > VBA高速化テクニック

無駄な表示を止める



画面の描画は時間のかかる処理です。
たとえば、セルに直接値を代入するだけなら、それはメモリ内での出来事です。しかし、代入した結果を表示するには、画面の描画を更新しなければなりません。これは、セルに値を代入するだけでなく、アクティブセルを移動するときも同じです。アクティブセルは、周囲が太線で囲まれます。アクティブセルを移動するということは、直前の太線を消して、新しく別のセルに太線を表示するということです。もし、画面がスクロールするのなら、行番号や列番号の表示も書き換えなければなりません。Excelのマクロでは、できるだけ不要な画面描画を抑止するのが、高速化のポイントです。

ApplicationオブジェクトのScreenUpdatingプロパティにFalseを設定すると、それ以降の画面描画を抑止されます。今回は、このプロパティによる速度の違いを検証してみます。

Sub Test1()
    Dim i As Long
    For i = 1 To 5000
        Cells(i, 1).Select
        Selection = i
    Next i
End Sub

Sub Test2()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = 1 To 5000
        Cells(i, 1).Select
        Selection = i
    Next i
    Application.ScreenUpdating = True
End Sub

Test1 Test2 %
1回目  6.53 秒  0.33 秒  5.1% 
2回目  6.42 秒  0.33 秒  5.2% 
3回目  6.56 秒  0.34 秒  5.1% 
4回目  6.48 秒  0.33 秒  5.1% 
5回目  6.64 秒  0.33 秒  5.0% 
6回目  6.77 秒  0.33 秒  4.9% 
7回目  6.90 秒  0.33 秒  4.8% 
8回目  6.92 秒  0.34 秒  5.0% 
9回目  6.84 秒  0.33 秒  4.9% 
10回目  6.84 秒  0.33 秒  4.9% 
平均  6.69 秒  0.33 秒  5.0% 

このように、ScreenUpdatingプロパティで画面の描画を抑止すると、マクロの実行速度は大きく向上します。しかし、上記のTest1は、そもそもSelectしているのがいけません。

  • Selectした
  • 画面が更新された
  • 時間がかかった
  • 画面の更新を抑止した
  • 実行速度が上がった

ではなく

  • Selectしない

だけで済む簡単な話です。
Selectについては、次項をご覧ください。



このエントリーをはてなブックマークに追加