VBAの高速化でよく使われているであろうコードです。
ざっくりと以下の3つの動作モードにして
スムーズにVBAの実行をできるようにします。
1.画面の更新を停止
2.イベント発生を抑制
3.更新される都度にセルに入力された数式などの再計算を停止する
使用方法
上のコードをモジュール内に貼り付けて、実際のメインの処理をする際に
高速化の処理が必要な時に下のように記述して使用します。
Call accelerator(True)
' 実際の処理
Call accelerator(False)
簡単な動作確認
以下のコードを使いaccelerator有りと無しでの速度の比較をします。
(処理結果)
accelarator有:4秒
accelarator無:12秒
その他所見など
実際に高速化の処理を使う際にはプロシージャを分けて独立して使うようにしています。メインの処理を記述したプロシージャ内に3つの高速化の切替の処理を直接記述すると、行数が増えて見にくくなると感じたり、使い回しのしやすかったりするなどの理由から、上のようにして使うようにしています。
実用する際の処理速度においては、画面の更新頻度や再計算の頻度、イベントの発生なども考えられ、上のサンプルによる比較よりも差が開いていくであろうと思います。私の使用時の例になりますが、VBAでIEを操作してWebサイトから情報を収集するスクレイピングなどでは、セルに書き込まれる情報が増えるほどVBAの動作が重くなり、accelaratorによる処理の恩恵が大きくなったと実感があります。
使用するメリットとしては速度が上がることですが、処理の過程が見づらくなることがデメリットとして挙げられるかと思われます。完動する状態での大容量の情報の処理などで動作が重くなり遅くなったりするときには、動作速度の改善の見込みがあり有効であるかと思います。