- Home ›
- Excel VBA入門 ›
- 共通の操作
画面の再描画を一時停止する
マクロを実行している時に、背景色を変更したり、セルの値を別のセルにコピーしたりといった処理を行うと、その都度処理した内容が画面に更新されていきます。通常は問題無いのですが、大量の処理を一度に行う場合など都度画面更新がされていると処理が遅くなってしまいます。その為、画面の更新を一時的に停止させ、全ての処理が終わってから画面更新を行うようにすればスピードアップになる場合があります。ここでは Excel VBA を使って画面の再描画を一時停止する方法について解説します。
(Last modified: )
画面の再描画を一時停止する
画面の再描画を一時停止するには、Applicationオブジェクトの「ScreenUpdating」プロパティに「False」を設定します。
Application.ScreenUpdating = False
繰り返し行われるような処理が終わった段階で「True」を設定することで画面の再描画が再開されます。
この設定は永続的なものではなく、マクロの実行が終了すると自動的に設定は「True」に戻ります。
サンプルプログラム
では簡単なサンプルで試してみましょう。下記のサンプルは1つのセルをコピーし沢山のセルに貼り付けるという処理を、再描画ありと再描画無しの二通りで行い、かかった時間を測定しています。
Sub テスト() Dim time1 As String Dim time2 As String time1 = anyCopy() Application.ScreenUpdating = False time2 = anyCopy() MsgBox "再描画ありは" & time1 & "秒、再描画無しは" & time2 & "秒" Application.ScreenUpdating = True End Sub Function anyCopy() As Variant Dim startTime As Variant Dim endTime As Variant Cells(1, 1).Copy startTime = Time For i = 1 To 500 For j = 1 To 100 ActiveSheet.Paste Destination:=Cells(i, j) Next j Next i stopTime = Time anyCopy = (stopTime - startTime) * 24 * 60 * 60 End Function
上記マクロを実行すると次のようになります。
処理にかかる時間を大幅に削減できました。
-- --
Excel VBA を使って画面の再描画を一時停止する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。