エクセルVBAで使うコードの備忘録。VBAでエクセルのワークシートの処理をする際に、画面更新を一時的に停止する方法について。Selectなどで画面を頻繁に切り替えるコードを書いていたり、する場合は、画面の更新を停止することにより処理速度が劇的に改善する場合があるので、試してみて時間を無駄にしないようにしましょう。
画面の更新と処理速度
エクセルでは、ワークシート上のセルが選択されたりする際に画面が更新されます。たまに他の人が書いたVBAのマクロを動かしていると、ワークシートに値が順次入力されていく様子だったり、ワークシートが切り替わって処理がされる様子が見えたりすることがあると思います。人間の目に処理による変化が見えているということは、すなわちエクセルが処理が行われるたびに画面を再描画してアニメーションのように人間に見せてしまっているということです。
このようなエクセルの動きは、突き詰めて考えると人間に見える必要はありません。人間にとってはマクロが動いてちゃんとプログラムが走っている感じがして楽しいかもしれませんが、エクセルの処理にとっては何のメリットもありません。
この再描画の処理は、比較的短時間で終わる作業をマクロで行う場合にはほとんど問題になりませんが、例えば一度処理を始めたら数時間かかるような重いマクロを走らせる場合には無視できなくなります。
自分で書いたマクロが思ったほど処理に時間がかかる場合は、とりあえず画面の更新を一度止めて効果を見てみるとよいかもしれません。
画面の描画を停止する・再開する
画面の描画を停止・再開するには、ApplicationオブジェクトのScreenUpdatingプロパティの値を変更します。このプロパティの値をFalseに設定すると画面の描画が停止されます。画面の描画を再開するにはScreenUpdatingプロパティにTrueを設定してやります。念のため、画面の描画を停止した場合は必ず処理が終わったタイミングで再開させるようにしておきましょう。
サンプルコード
'--- 画面の描画を停止 ---'
Application.ScreenUpdating = False
'--- 画面の描画を再開 ---'
Application.ScreenUpdating = True