【Excel VBA】マクロの動作が遅い!動作を早くするにはScreenUpdatingをFalseにする

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を使う上で必須のコードです。ぜひこれを機会に覚えて使ってください^^

コメント

タイトルとURLをコピーしました