Excelのマクロを使っていて、動作が遅いと感じることは多いのではないでしょうか?
VBAが遅くなる大きな原因の一つに画面の表示があります。画面の表示(更新)を止めるだけで、VBAがかなり早くなることがあります。
この記事では、画面の表示を止めるScreenUpdatingをご紹介します。
Application.ScreenUpdating=Falseで高速化
画面の表示を止めて高速化するには、以下のコードを最初に記述するだけで速くなります。
Application.ScreenUpdating = False
本当に、たったこれだけです。
実際に試してほしいので、次のコードをVBEにコピーして実行してみて下さい。
Sub ScreenUpdating()
Dim X As Long
Dim Y As Long
Dim i As Long
i = 0
For Y = 1 To 100
For X = 1 To 100
i = i + 1
Cells(Y, X) = i
Next
Next
End Sub
実行してもらえればわかりますが、このコードは縦横に100ずつ10,000まで表示するコードになります。たったこれだけのすごくシンプルなコードですが、時間がかかるのがわかるかと思います。
次に「Applcation.ScreenUpdating = False」を入れた、以下のコードをVBEにコピーして実行してみて下さい。
Sub ScreenUpdating()
Application.ScreenUpdating = False
Dim X As Long
Dim Y As Long
Dim i As Long
i = 0
For Y = 1 To 100
For X = 1 To 100
i = i + 1
Cells(Y, X) = i
Next
Next
Application.ScreenUpdating = True
End Sub
画面更新を止める前は何回かに分けて画面が更新されていたかと思いますが、画面更新を止めると最後に一瞬で表示されるように変わったかと思います。
Application.ScreenUpdating = Falseはどこに記述したらいい?
Application.ScreenUpdating=Falseのコードは、実際に画面の更新が開始されるより前であれば、問題ないと思います。具体的には、
Cells(1,1)=1
など、セルに値を入れるより前になります。
わからない場合は、コードの一番最初に入れてみて下さい。画面が更新されずに困ることがあれば、その時に変えてみましょう。
Application.ScreenUpdating=Trueはいらない?
コードの最後に、画面更新をもとに戻す以下のコードを記述するのが常識(一般的)です。
'画面の更新を開始する
Application.ScreenUpdating=True
ただ、マクロが終了すると自動的に画面表示が更新されるようになるので、書かなくても問題なく動作します。
なので、私の場合はほとんど記述することはありません。
最後に
今回は簡単なコードでの実行例をご紹介しました。そのため時間としては数秒も変わりませんが、複雑なコードになってくるとApplication.ScreenUpdating=Falseの高速化の効果が実感できるかと思います。
ScreenUpdatingは、VBAを使う上で必須のコードです。ぜひこれを機会に覚えて使ってください^^
コメント