マクロ講座画面の更新を止める 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
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.Calculation
4. マクロVBAの実行中に計算方法を設定し、自動計算から手動計算にしておくと、マクロ実行中の自動計算が止まる分処理が早くなります。 こちらは、Application.ScreenUpdating = True と同時に用いることが多いです。
Sub 画面更新と自動計算の抑止() Application.ScreenUpdating = false Application.Calculation = xlCaluculationManual ' ~時間のかかる転機処理等を含む~ Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = true End Sub