【Excel】マクロの実行速度を上げるテクニック!Excelの画面更新停止と自動計算オフで高速化

【Excel】マクロの実行速度を上げるテクニック!Excelの画面更新停止と自動計算オフで高速化
🛡️ 超解決

Excelマクロの実行に時間がかかり、業務効率が低下していませんか。特に大量のデータを処理する場合、マクロの実行速度は無視できない問題です。

Excelの画面更新を停止したり、自動計算をオフにしたりすることで、マクロの実行速度を大幅に向上させることが可能です。この記事では、これらのテクニックを具体的に解説します。

この記事を読めば、マクロの実行速度が遅い原因を理解し、効果的な高速化テクニックを習得できます。

【要点】マクロ実行速度を向上させる主要テクニック

  • 画面更新の停止: マクロ実行中の画面描画処理をスキップし、処理速度を向上させます。
  • 自動計算のオフ: マクロ実行中はExcelの自動計算機能を停止し、不要な再計算を防ぎます。
  • イベント無効化: マクロ実行中のシートイベント(変更時、選択時など)を一時的に無効化します。

ADVERTISEMENT

マクロ実行速度低下の主な原因

Excelマクロの実行速度が遅くなる原因は複数考えられます。最も一般的なのは、Excelがマクロの実行中に画面を更新し続けることです。

データが変更されるたびにExcelは画面を描画し直すため、この処理がマクロの実行を妨げます。また、ワークシート上の数式が自動計算されることも、実行速度低下の一因となります。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

画面更新停止による高速化の仕組み

Excel VBAには、マクロ実行中の画面更新を一時的に停止する機能があります。これは、`Application.ScreenUpdating` プロパティを使用することで実現できます。

このプロパティを `False` に設定すると、Excelは画面への描画処理を一切行いません。マクロの実行が完了した後、再度 `True` に戻すことで、画面更新が再開されます。

これにより、マクロがデータを変更するたびに画面がちらついたり、再描画に時間がかかったりするのを防ぎ、処理速度を大幅に向上させることができます。

画面更新を停止するVBAコード

  1. マクロの冒頭に記述
    マクロの処理を開始する前に、以下のコードを記述します。これにより、画面の自動更新が無効になります。
    Application.ScreenUpdating = False
  2. マクロ処理の実行
    ここに、実際のデータ処理や操作を行うVBAコードを記述します。
  3. 画面更新を再度有効にする
    マクロの処理が完了したら、以下のコードを記述して画面の自動更新を元に戻します。
    Application.ScreenUpdating = True

注意点: マクロの途中でエラーが発生した場合、画面更新が元に戻らない可能性があります。これを防ぐため、エラーハンドリングを適切に設定することが重要です。

ADVERTISEMENT

自動計算オフによる高速化の仕組み

Excelのワークシートには、セルに入力された数式を自動的に計算する機能があります。マクロでデータを大量に変更すると、その都度Excelは数式を再計算しようとします。

この自動計算は、マクロの実行中に不要な計算処理を発生させ、実行速度を低下させる原因となります。`Application.Calculation` プロパティを `xlCalculationManual` に設定することで、マクロ実行中は自動計算を一時的に停止できます。

マクロの実行が完了したら、`xlCalculationAutomatic` に戻すことで、自動計算を再開させます。

自動計算をオフにするVBAコード

  1. マクロの冒頭に記述
    画面更新の停止コードの直後に、以下のコードを記述します。これにより、自動計算が無効になります。
    Application.Calculation = xlCalculationManual
  2. マクロ処理の実行
    ここに、実際のデータ処理や操作を行うVBAコードを記述します。
  3. 自動計算を元に戻す
    マクロの処理が完了したら、以下のコードを記述して自動計算を有効に戻します。
    Application.Calculation = xlCalculationAutomatic

注意点: 自動計算をオフにしたままマクロを終了すると、以降のExcelの動作に影響が出る可能性があります。必ずマクロの最後に自動計算を有効に戻してください。

イベント無効化による高速化

Excelには、シート上で特定のイベント(セルの選択、値の変更、シートの切り替えなど)が発生した際に、あらかじめ設定されたVBAコード(イベントプロシージャ)を実行する機能があります。

マクロが大量のデータを処理する際、これらのイベントが頻繁に発生すると、その都度イベントプロシージャが実行され、処理速度が低下する原因となります。`Application.EnableEvents` プロパティを `False` に設定することで、これらのイベントの発生を一時的に無効化できます。

これにより、イベントプロシージャの実行によるオーバーヘッドを削減し、マクロの実行速度をさらに向上させることが期待できます。

イベントを無効化するVBAコード

  1. マクロの冒頭に記述
    画面更新停止や自動計算オフのコードに続けて、以下のコードを記述します。これにより、イベントの発生が無効になります。
    Application.EnableEvents = False
  2. マクロ処理の実行
    ここに、実際のデータ処理や操作を行うVBAコードを記述します。
  3. イベントの有効化
    マクロの処理が完了したら、以下のコードを記述してイベントの発生を有効に戻します。
    Application.EnableEvents = True

注意点: イベントを無効化したままマクロを終了すると、意図しない動作を引き起こす可能性があります。必ずマクロの最後にイベントを有効に戻すようにしてください。

複数の高速化テクニックを組み合わせる

これらのテクニックは、それぞれ単独でも効果がありますが、組み合わせて使用することでより大きな高速化効果が得られます。

一般的には、マクロの冒頭で `ScreenUpdating`、`Calculation`、`EnableEvents` の3つのプロパティをそれぞれ `False` に設定し、マクロの処理が終わったら元の設定に戻すという流れで実装します。

この組み合わせにより、Excelの描画処理、数式再計算、イベントプロシージャ実行といった、マクロ実行のボトルネックとなりうる処理をすべて抑制できます。

エラー発生時の復旧処理

マクロの実行中にエラーが発生した場合、`Application.ScreenUpdating = False` や `Application.Calculation = xlCalculationManual`、`Application.EnableEvents = False` といった設定が元に戻らないままマクロが終了してしまう可能性があります。

これにより、Excelが意図しない状態になったり、以降の操作に支障が出たりすることがあります。これを防ぐために、VBAのエラーハンドリング機能を使用することが不可欠です。

具体的には、`On Error GoTo` ステートメントを使用して、エラー発生時に特定のラベルに処理をジャンプさせ、そこで各プロパティを元に戻す処理を記述します。

エラーハンドリングを使った復旧コード例

  1. エラーハンドリングの設定
    マクロの冒頭で、エラー発生時の飛び先を指定します。
    On Error GoTo ErrorHandler
  2. 初期設定
    画面更新、自動計算、イベントを無効にします。
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
  3. メイン処理
    ここに、実行したいマクロの処理を記述します。
  4. 正常終了時の復旧処理
    マクロが正常に終了した場合、各設定を元に戻します。
    ErrorHandler_Exit:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Exit Sub
  5. エラー発生時の復旧処理
    エラーが発生した場合に実行される処理です。エラーメッセージを表示し、設定を元に戻します。
    ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
    Resume ErrorHandler_Exit

補足: `Resume ErrorHandler_Exit` は、エラーハンドリングブロックから抜けて、正常終了時の復旧処理 (`ErrorHandler_Exit` ラベル以降) を実行させるための記述です。

画面更新停止と自動計算オフの比較

項目 画面更新停止 (ScreenUpdating) 自動計算オフ (Calculation) イベント無効化 (EnableEvents)
目的 画面描画処理のスキップ 数式再計算処理の抑制 イベントプロシージャ実行の抑制
効果 画面のちらつき防止、表示速度向上 不要な計算による時間消費の削減 イベント処理によるオーバーヘッド削減
設定値 False (停止) / True (有効) xlCalculationManual (手動) / xlCalculationAutomatic (自動) False (無効) / True (有効)
影響 マクロ実行中の画面表示が止まる 数式の結果が即時反映されなくなる シートイベントが発火しなくなる
必須度 中〜高 (イベント処理が多い場合)

これらの設定は、マクロの処理内容やデータ量に応じて、どれを適用するか、あるいはすべて適用するかを判断します。一般的には、すべての設定を適用することで最も高い高速化効果が期待できます。

Excel 2019・2021との互換性

今回紹介した `Application.ScreenUpdating`、`Application.Calculation`、`Application.EnableEvents` プロパティは、Excelのバージョンに依存しない基本的なVBA機能です。そのため、Excel 2019やExcel 2021でも問題なく動作します。

Microsoft 365版Excelでも同様に利用可能です。これらのテクニックは、古いバージョンのExcelから最新バージョンまで、広く活用できる汎用性の高いものです。

まとめ

Excelマクロの実行速度は、`Application.ScreenUpdating` による画面更新の停止、`Application.Calculation` による自動計算のオフ、そして `Application.EnableEvents` によるイベントの無効化を組み合わせることで、劇的に向上させることが可能です。

これらのテクニックをマクロの冒頭と末尾に適切に設定し、エラーハンドリングを併用することで、安全かつ高速なマクロ処理を実現できます。

ぜひ、ご自身のマクロにこれらの高速化テクニックを適用し、業務効率の向上に役立ててください。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】