- 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
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。