
ExcelVBA マクロを実行すると、画面が更新されるたびにチラついたり、処理速度が遅くなったりすることがあります。この「画面のちらつき」を抑えることで、処理速度を向上 させ、ユーザーのストレスを軽減 できます。 使い方や注意点など、サンプルコードをもとに具体的に解説します。
📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!
👇実務で“そのまま使える”テンプレ付きで、コピペするだけ!
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き
目次
Excel VBA 画面更新ちらつきや処理速度が遅い|シーン
以下のシーンで利用します。
1.大量のデータを処理するマクロ(行削除・セル値変更・書式変更 など)
2.シートを切り替えるマクロ(別のシートに移動して値を取得 など)
3.繰り返し処理を行うマクロ(ループで複数のセルを変更 など)
Excel VBA 画面更新ちらつきや処理速度が遅い|サンプルコード
画面のちらつきを抑える基本コード
標準モジュール
Option Explicit
Sub PreventFlicker()
' 画面の更新を停止
Application.ScreenUpdating = False
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' 100行分のセル値を変更(画面のちらつきを抑える)
Dim i As Integer
For i = 1 To 100
ws.Cells(i, 1).Value = "データ" & i
Next i
' 画面の更新を再開
Application.ScreenUpdating = True
End Sub
・Application.ScreenUpdating = False で画面の更新を停止
・Application.ScreenUpdating = True で通常の状態に戻す
・処理の途中で True に戻すと意味がない ので注意
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。
画面のちらつきを抑えて複数シートを切り替える
標準モジュール
Option Explicit
Sub SwitchSheetsWithoutFlicker()
Application.ScreenUpdating = False
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")
' シート1のA1の値をシート2のA1にコピー
ws2.Range("A1").Value = ws1.Range("A1").Value
' 画面の更新を再開
Application.ScreenUpdating = True
End Sub
ScreenUpdating = False を使うと、シート移動によるちらつきを防止できる
画面のちらつき、計算負荷を軽減する
標準モジュール
Option Explicit
Sub OptimizePerformance()
' 画面の更新を停止
Application.ScreenUpdating = False
' 自動計算をオフ(手動計算)
Application.Calculation = xlCalculationManual
' イベント処理をオフ
Application.EnableEvents = False
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim i As Integer
For i = 1 To 1000
ws.Cells(i, 1).Value = "処理" & i
Next i
' 設定を元に戻す
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
・自動計算をオフ にする (Application.Calculation = xlCalculationManual)
・イベント処理を無効化 (Application.EnableEvents = False)
・処理後に元に戻すことを忘れないこと。
Excel VBA 画面更新ちらつきや処理速度が遅い|注意点
1. 処理が終わったら ScreenUpdating = True に戻す。
False のままだと、Excelの画面が更新されず違和感が出る
2. デバッグ時は False を使わない方がよい。
画面が止まるため、どこで止まっているのか分かりにくくなる。
3. 計算モードの変更に注意
Application.Calculation = xlCalculationManual を設定した場合は、マクロ終了後に xlCalculationAutomatic に戻す必要がある
Excel VBA 画面更新ちらつきや処理速度が遅い|まとめ
Application.ScreenUpdating = False で 画面の更新を止める
Application.ScreenUpdating = True で 更新を再開する
Application.Calculation = xlCalculationManual で計算負荷を軽減
Application.EnableEvents = False でイベント処理を無効化
「Excel VBAで自動化するコードのベースが習得できる解説書」
Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。