【Excel VBA】マクロを高速化する基本中の基本 Application.ScreenUpdating = False

VBAマクロ、特に多くのセルを操作するループ処理などを実行した際に、「処理が遅い」「画面がチカチカして見づらい」と感じたことはありませんか?

その原因は、ExcelがVBAによる一つ一つの操作を、律儀に画面へ逐一描画しているからです。

この記事では、この画面描画を一時的にオフにすることで、VBAマクロの処理速度を劇的に向上させる、最も基本的で効果的なテクニックApplication.ScreenUpdatingを解説します。


目次

なぜ画面の更新を止めると速くなるのか?

VBAがCells(1, 1).Value = "A"のようなコードを実行すると、Excelはその結果を即座に画面に反映(再描画)しようとします。これを1万回繰り返すループ処理では、1万回の画面更新が発生します。

画面描画は、コンピュータにとって非常に負荷の高い処理です。そのため、処理の大半が「画面の更新」という待ち時間に費やされ、マクロ全体のパフォーマンスが著しく低下します。

Application.ScreenUpdating = Falseは、この描画処理を**「マクロがすべて終わるまで一旦ストップして、最後に一度だけ結果を描画して」**とExcelに指示する命令です。これにより、無駄な待ち時間がなくなり、VBAは本来の処理能力を最大限に発揮できます。


完成したVBAコード(エラー処理を含む推奨パターン)

ScreenUpdatingFalseにした場合、万が一マクロがエラーで中断すると、画面が更新されないままになってしまう危険があります。それを防ぐため、エラーが発生しても必ずTrueに戻すエラーハンドリングを組み込むのが鉄則です。

Sub FastProcessingWithScreenUpdating()

    '--- 1. 処理の最初に画面更新をオフにする ---
    Application.ScreenUpdating = False
    
    ' エラーが発生しても必ず画面更新をオンに戻すための準備
    On Error GoTo ErrorHandler

    '--- 2. メインの処理 ---
    ' (例:10000個のセルに値を入力する重い処理)
    Dim i As Long
    For i = 1 To 10000
        ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value = "Test " & i
    Next i
    
'--- 3. 処理の最後に必ず画面更新をオンに戻す ---
ExitRoutine:
    Application.ScreenUpdating = True
    MsgBox "処理が完了しました。"
    Exit Sub ' エラーハンドラを通過させないため
    
ErrorHandler:
    ' エラー発生時にここへジャンプ
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
    ' 画面更新をオンに戻すため、ExitRoutineへ進む
    Resume ExitRoutine
    
End Sub

パフォーマンスの比較

ScreenUpdatingの効果を体感するために、以下の2つのコードを実行して速度を比較してみてください。

'--- Before: 画面更新がオンのまま(遅い) ---
Sub SlowLoop()
    Dim i As Long
    For i = 1 To 20000: Cells(i, 1).Value = i: Next
End Sub

'--- After: 画面更新をオフ(速い) ---
Sub FastLoop()
    Application.ScreenUpdating = False
    Dim i As Long
    For i = 1 To 20000: Cells(i, 1).Value = i: Next
    Application.ScreenUpdating = True
End Sub

データ量によっては、処理時間が数十倍から数百倍も変わることが分かります。


まとめ

VBAマクロの高速化における、最も重要で、最初に覚えるべきパターンは以下の通りです。

  1. マクロの開始直後Application.ScreenUpdating = False を記述する。
  2. (推奨)エラーが発生しても必ず元に戻るよう、エラーハンドリングを記述する。
  3. マクロの終了直前に、必ず Application.ScreenUpdating = True を記述して画面更新を元に戻す。

大量のセル操作、シートの追加・削除、書式設定など、画面に変化が起きるほとんどの処理は、このおまじないで囲むだけで劇的に高速化します。VBAのパフォーマンスに悩んだら、まず最初にこの設定を見直してみてください。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次