ExcelVBA マクロ実行で画面更新ちらつきや処理速度が遅くなる改善方法

 

ExcelVBA  マクロを実行すると、画面が更新されるたびにチラついたり、処理速度が遅くなったりすることがあります。この「画面のちらつき」を抑えることで、処理速度を向上 させ、ユーザーのストレスを軽減 できます。 使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

2025年の目標は繰り返し作業に悩まされない年にしませんか? Excel VBAを活用した効率化がその第一歩
本サイト参考:Excel VBAで自動化するコードのベースを習得したい方におすすめの記事

 

Excel VBA 画面更新ちらつきや処理速度が遅い|シーン

以下のシーンで利用します。

1.大量のデータを処理するマクロ(行削除・セル値変更・書式変更 など)

2.シートを切り替えるマクロ(別のシートに移動して値を取得 など)

3.繰り返し処理を行うマクロ(ループで複数のセルを変更 など)

 

Excel VBA 画面更新ちらつきや処理速度が遅い|サンプルコード

Excel VBAで効率化の準備をしてみませんか?2025年をよりスムーズに過ごすための資格
基本的な文法やVBAの実践的な応用までを網羅的に学習できる方法は、ExcelVBAエキスパート資格の取得を目指すこと。学習を通して、より効率的に、着実に基礎を身につけることが可能です。資格取得すれば、スキルの証明にもなり、職場での評価アップにも繋がるため、勉強を進めるモチベーションにもなります。
本サイト参考:マクロ知識がないから「何から学べば良いのかわからない」という人におすすめの記事

画面のちらつきを抑える基本コード

標準モジュール

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 に戻すと意味がない ので注意

画面のちらつきを抑えて複数シートを切り替える

標準モジュール

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で自動化するコードのベースを習得したい方におすすめ!

VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。

 

Excel  VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。