マクロ講座画面の更新を止める Application.ScreenUpdating

画面の更新を止める Application.ScreenUpdating
画面の更新を止める Application.ScreenUpdating

マクロ 79回

マクロの高速処理と画面更新

非表示でブックを開きたいときや、マクロ実行時に画面が更新されてちらつくのを防ぎたいとき、スピードをアップしたいときなどに、
今回の画面の更新を止める、”Application.ScreenUpdating=False”を使います。
これまで、何度も使ってきましたが、今回は使い方をまとめておきます。

コードの記述 Application.ScreenUpdating

1. マクロを実行していて、処理が遅くなる原因は、主に、アクティブシートの移動であったり、セルを移動して転記であったり、並べ替えなどの際に、画面を再描画するためです。 仮に100回移動するとして、その1回ごとに移動を描画して更新していたのでは、そのぶん余計な時間が必要となります。

Sub 画面更新()
'    画面更新を停止する
    Application.ScreenUpdating = False
    
'    間にメイン処理
    
'    画面更新を再開する
    Application.ScreenUpdating = True
End Sub

実際にコードに記述するときは、コメントは不要ですので、ハイライトしてある2行の間にメイン処理を書くだけとなります。
また、”Application.ScreenUpdating = True” で描画を再開しているのは、このマクロを実行したあとで、他のマクロを実行する場合のことも考えて更新処理を再開しています。
そうしないと、画面更新を止めたままの状態が引き継がれてしまうからです。
Application.ScreenUpdating = False
Application.ScreenUpdating = True

Application.ScreenUpdating 具体的な使用例

2. すべてのシートに同じマクロを実行という記事で、Application.ScreenUpdating = Trueを使っています。

Sub すべてのシートでマクロ実行()
Application.ScreenUpdating = False '画面がちらつかないように記載
  Dim シート As Worksheet
      For Each シート In Worksheets
          シート.Select
          Call 日付表示を和暦に ' Callステートメントでマクロを呼び出す
      Next シート
Application.ScreenUpdating = True
End Sub

画面の更新を止める Application.ScreenUpdating2

3. 大きなデータを分割コピーしてCSVで保存するという記事で、Application.ScreenUpdating = Trueを使っています。
また以下のコードでは、Application.DisplayAlerts = Falseも使っています。
Application.DisplayAlerts = Falseは、確認のメッセージを非表示にしたい時に、記述します。
分っていることに対して、メッセージを消す手間が余計な作業ですので、非表示にするのです。


Sub データを分割してCSVで保存()
    Dim 元シート As Worksheet, Wb As Workbook, ファイル名 As String
    Dim 総行数 As Long, 回数 As Long, i As Long, 開始行 As Long
    Const コピー行 = 100
    Set 元シート = ActiveSheet 
    総行数 = 元シート.UsedRange.Rows.Count - 1
    回数 = Int(総行数 / コピー行) + IIf(総行数 Mod コピー行 > 0, 1, 0)
    開始行 = 2
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For i = 1 To 回数
    Set Wb = Workbooks.Add
    ファイル名 = "データ" & 開始行 - 1 & "~" & 開始行 + コピー行 - 2 & "まで.CSV"
         元シート.Rows(1).Copy Wb.Worksheets("Sheet1").Range("A1")
        元シート.Rows(開始行 & ":" & 開始行 + コピー行 - 1).Copy Wb.Worksheets("Sheet1").Range("A2")
        Wb.SaveAs Filename:=ThisWorkbook.Path & "\CSV\" & ファイル名, FileFormat:=xlCSV, CreateBackup:=False
        Wb.Close
        Set Wb = Nothing
        開始行 = 開始行 + コピー行
    Next i
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub   
画面の更新を止める Application.ScreenUpdating3

計算方法の設定 Application.Calculation

4. マクロVBAの実行中に計算方法を設定し、自動計算から手動計算にしておくと、マクロ実行中の自動計算が止まる分処理が早くなります。 こちらは、Application.ScreenUpdating = True と同時に用いることが多いです。

Sub 画面更新と自動計算の抑止()
    Application.ScreenUpdating = false
    Application.Calculation = xlCaluculationManual
    
    ' ~時間のかかる転機処理等を含む~
    
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = true
End Sub