2016年4月19日火曜日

Excel 2013で画面更新を抑止したときの効果

背景

Application.ScreenUpdating = False とすることによって画面更新を抑止すれば,処理速度が向上することはよく知られている。

一方,Excel 2013でSDIになったためか,この方法が悪さをするケースも時々あり,Application.Visible = False とすることで解決できたケースもあった。

そこで,画面更新を抑止して処理速度向上を狙う場合の,各種方法の効果を評価した。


検証環境

  • OS: Windows 10 Pro(64bit)
  • アプリケーション: Excel 2013(64bit)
  • CPU: Core i7 2.4GHz
  • RAM: 16GB
  • 仮想メモリ: OFF


検証方法

以下の手順で検証した。
  1. VBAで,20000個のセルを1個ずつ選択するプログラム(下記)を作成する。

        For I = 1 To 20000 Step 1
            Cells(I, 1).Select
        Next
     
  2. このプログラムを実行する際に,下記の各方法で画面更新を抑止し,処理時間をtimeGetTime関数で計測する。
    • 対策なし
    • Application.Top = 2000(ExcelウィンドウをPC画面の表示可能領域の外側に移動)
    • Application.Visible = False(Excelウィンドウを非表示化)
    • Windows(ThisWorkbook.Name).Visible = False(ウィンドウを非表示化)
    • ThisWorkbook.IsAddin = True(ブックを一時的にアドイン状態にしてウィンドウを非表示化)
    • Application.WindowState = xlMinimized(Excelウィンドウを最小化)
    • Application.ScreenUpdating = False
  1. なお,キャッシュなど様々な影響があると思われるが,それらの影響が対等になるようにいろいろとりまぜて,計10回ずつ測定する。


結果

結果は下図のとおり。エラーバーは十分に小さいので,省略した。
  • 定番の Application.ScreenUpdating = False が最も高速であった。
  • Application.Visible = False は,なにも対策しないときの2倍高速だが Application.ScreenUpdating = Falseよりは圧倒的に遅い。



0 件のコメント:

コメントを投稿