エクセルが重くなるVBAの処理を高速化して画面ちらつきを防ぐ方法

画面更新高速化処理VBA

コマンドボタンをクリックして作業を自動化するとVBAコードを読み取りながら処理をしているので、画面がチョコチョコ移動したり切り替わったり目障りだと思ったことありませんか?

エクセル自体が重くなってしまう原因でもあるので、「ScreenUpdatingプロパティ」を付け加えれば、処理を行っている最中でも画面固定してくれるので処理の高速化ができますよ。

画面固定して処理を高速化するVBA

Excel-VBAを使うとVBAコードを記載した順番に処理を行うので、セルやシートがチョコチョコ移動することで画面表示も同じように更新されるので画面が動き、さらに処理も遅くなります。

この画面更新処理を停止させたり、稼働させたりすることができるのが「ScreenUpdatingプロパティ」です。

ScreenUpdatingプロパティの使い方

使い方は簡単で、既存のVBAコード「Sub()の直後と~End Sub直前に「ScreenUpdatingプロパティ」を使ってあげるだけなので、それぞれ1行ずつ記入するだけなのでとても簡単です。

簡単に言うと、すでに書いてあるVBAコードをサンドイッチ(挟み込む)だけです。

例えば、ユーザーフォームに配置したコマンドボタンに1に下記のようなVBAコードがあったとします。

既存のVBAコード

Private Sub CommandButton1_Click()
Sheets(“sheet2”).Select
Range(“AA1:AZ1000”).Value = “1”
Sheets(“sheet1”).Select
Range(“A1”).Select
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. シート2を選択
  3. セルAA1~AZ1000の範囲内に「1」を入力
  4. シート1を選択
  5. セルA1を選択
  6. マクロ記録終了

このようなVBAコードがあったら、画面はシート1➡シート2➡セルAA1~AZ1000➡シート1➡セルA1と、このように順番に移動していることになります。

これが一瞬で作業業をするので画面がチラついて見える原因で、画面も動くので処理が遅くなります。

そこで、ScreenUpdatingプロパティを使うとちらつきが防止できます。

画面更新処理高速化VBA

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Sheets(“sheet2”).Select
Range(“AA1:AZ1000”).Value = “1”
Sheets(“sheet1”).Select
Range(“A1”).Select
Application.ScreenUpdating = True
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 画面更新処理を停止する
  3. シート2を選択
  4. セルAA1~AZ1000の範囲内に「1」を入力
  5. シート1を選択
  6. セルA1を選択
  7. 画面更新処理を再開する
  8. マクロ記録終了

このようにSub()の直後にApplication.ScreenUpdating = Falseと付け足すと、画面更新処理を停止してから記述したVBAコードに従ってプログラムが作動します。

全てのプログラムの作業が終わったらEnd Subの直前にApplication.ScreenUpdating = Trueと付け足して、停止させた画面更新処理を再開(元に戻す)します。

  • Falseが停止
  • Trueが再開

ScreenUpdatingを使うことにより、ちらつき防止のついでに無駄な更新もなくなるので、VBAコードの処理も早くなるのでセルやシートの移動を伴うVBAコードを記述する時は必ず「ScreenUpdatingプロパティ」を使うほど使用頻度が高いVBAコードです。

オフィスのバージョンにもよるかもしれませんが、Trueを省略可(マクロ実行終了で自動的に戻る)となっている情報もあったので、当初は省略していましたが時々フリーズしていたので、省略せずに必ず記載するようにしてからはフリーズしていません。

私自身は、シートやセルが大幅に移動するVBAコードを書く時は、全て「ScreenUpdatingプロパティ」を必ず入れていますので、処理も早くなるのでおススメ処理ですよ。