Excelマクロの実行に時間がかかり、業務効率が低下していませんか。特に大量のデータを処理する場合、マクロの実行速度は無視できない問題です。
Excelの画面更新を停止したり、自動計算をオフにしたりすることで、マクロの実行速度を大幅に向上させることが可能です。この記事では、これらのテクニックを具体的に解説します。
この記事を読めば、マクロの実行速度が遅い原因を理解し、効果的な高速化テクニックを習得できます。
【要点】マクロ実行速度を向上させる主要テクニック
- 画面更新の停止: マクロ実行中の画面描画処理をスキップし、処理速度を向上させます。
- 自動計算のオフ: マクロ実行中はExcelの自動計算機能を停止し、不要な再計算を防ぎます。
- イベント無効化: マクロ実行中のシートイベント(変更時、選択時など)を一時的に無効化します。
ADVERTISEMENT
目次
マクロ実行速度低下の主な原因
Excelマクロの実行速度が遅くなる原因は複数考えられます。最も一般的なのは、Excelがマクロの実行中に画面を更新し続けることです。
データが変更されるたびにExcelは画面を描画し直すため、この処理がマクロの実行を妨げます。また、ワークシート上の数式が自動計算されることも、実行速度低下の一因となります。
画面更新停止による高速化の仕組み
Excel VBAには、マクロ実行中の画面更新を一時的に停止する機能があります。これは、`Application.ScreenUpdating` プロパティを使用することで実現できます。
このプロパティを `False` に設定すると、Excelは画面への描画処理を一切行いません。マクロの実行が完了した後、再度 `True` に戻すことで、画面更新が再開されます。
これにより、マクロがデータを変更するたびに画面がちらついたり、再描画に時間がかかったりするのを防ぎ、処理速度を大幅に向上させることができます。
画面更新を停止するVBAコード
- マクロの冒頭に記述
マクロの処理を開始する前に、以下のコードを記述します。これにより、画面の自動更新が無効になります。Application.ScreenUpdating = False - マクロ処理の実行
ここに、実際のデータ処理や操作を行うVBAコードを記述します。 - 画面更新を再度有効にする
マクロの処理が完了したら、以下のコードを記述して画面の自動更新を元に戻します。Application.ScreenUpdating = True
注意点: マクロの途中でエラーが発生した場合、画面更新が元に戻らない可能性があります。これを防ぐため、エラーハンドリングを適切に設定することが重要です。
ADVERTISEMENT
自動計算オフによる高速化の仕組み
Excelのワークシートには、セルに入力された数式を自動的に計算する機能があります。マクロでデータを大量に変更すると、その都度Excelは数式を再計算しようとします。
この自動計算は、マクロの実行中に不要な計算処理を発生させ、実行速度を低下させる原因となります。`Application.Calculation` プロパティを `xlCalculationManual` に設定することで、マクロ実行中は自動計算を一時的に停止できます。
マクロの実行が完了したら、`xlCalculationAutomatic` に戻すことで、自動計算を再開させます。
自動計算をオフにするVBAコード
- マクロの冒頭に記述
画面更新の停止コードの直後に、以下のコードを記述します。これにより、自動計算が無効になります。Application.Calculation = xlCalculationManual - マクロ処理の実行
ここに、実際のデータ処理や操作を行うVBAコードを記述します。 - 自動計算を元に戻す
マクロの処理が完了したら、以下のコードを記述して自動計算を有効に戻します。Application.Calculation = xlCalculationAutomatic
注意点: 自動計算をオフにしたままマクロを終了すると、以降のExcelの動作に影響が出る可能性があります。必ずマクロの最後に自動計算を有効に戻してください。
イベント無効化による高速化
Excelには、シート上で特定のイベント(セルの選択、値の変更、シートの切り替えなど)が発生した際に、あらかじめ設定されたVBAコード(イベントプロシージャ)を実行する機能があります。
マクロが大量のデータを処理する際、これらのイベントが頻繁に発生すると、その都度イベントプロシージャが実行され、処理速度が低下する原因となります。`Application.EnableEvents` プロパティを `False` に設定することで、これらのイベントの発生を一時的に無効化できます。
これにより、イベントプロシージャの実行によるオーバーヘッドを削減し、マクロの実行速度をさらに向上させることが期待できます。
イベントを無効化するVBAコード
- マクロの冒頭に記述
画面更新停止や自動計算オフのコードに続けて、以下のコードを記述します。これにより、イベントの発生が無効になります。Application.EnableEvents = False - マクロ処理の実行
ここに、実際のデータ処理や操作を行うVBAコードを記述します。 - イベントの有効化
マクロの処理が完了したら、以下のコードを記述してイベントの発生を有効に戻します。Application.EnableEvents = True
注意点: イベントを無効化したままマクロを終了すると、意図しない動作を引き起こす可能性があります。必ずマクロの最後にイベントを有効に戻すようにしてください。
複数の高速化テクニックを組み合わせる
これらのテクニックは、それぞれ単独でも効果がありますが、組み合わせて使用することでより大きな高速化効果が得られます。
一般的には、マクロの冒頭で `ScreenUpdating`、`Calculation`、`EnableEvents` の3つのプロパティをそれぞれ `False` に設定し、マクロの処理が終わったら元の設定に戻すという流れで実装します。
この組み合わせにより、Excelの描画処理、数式再計算、イベントプロシージャ実行といった、マクロ実行のボトルネックとなりうる処理をすべて抑制できます。
エラー発生時の復旧処理
マクロの実行中にエラーが発生した場合、`Application.ScreenUpdating = False` や `Application.Calculation = xlCalculationManual`、`Application.EnableEvents = False` といった設定が元に戻らないままマクロが終了してしまう可能性があります。
これにより、Excelが意図しない状態になったり、以降の操作に支障が出たりすることがあります。これを防ぐために、VBAのエラーハンドリング機能を使用することが不可欠です。
具体的には、`On Error GoTo` ステートメントを使用して、エラー発生時に特定のラベルに処理をジャンプさせ、そこで各プロパティを元に戻す処理を記述します。
エラーハンドリングを使った復旧コード例
- エラーハンドリングの設定
マクロの冒頭で、エラー発生時の飛び先を指定します。On Error GoTo ErrorHandler - 初期設定
画面更新、自動計算、イベントを無効にします。Application.ScreenUpdating = FalseApplication.Calculation = xlCalculationManualApplication.EnableEvents = False - メイン処理
ここに、実行したいマクロの処理を記述します。 - 正常終了時の復旧処理
マクロが正常に終了した場合、各設定を元に戻します。ErrorHandler_Exit:Application.ScreenUpdating = TrueApplication.Calculation = xlCalculationAutomaticApplication.EnableEvents = TrueExit Sub - エラー発生時の復旧処理
エラーが発生した場合に実行される処理です。エラーメッセージを表示し、設定を元に戻します。ErrorHandler:MsgBox "エラーが発生しました: " & Err.DescriptionResume 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` によるイベントの無効化を組み合わせることで、劇的に向上させることが可能です。
これらのテクニックをマクロの冒頭と末尾に適切に設定し、エラーハンドリングを併用することで、安全かつ高速なマクロ処理を実現できます。
ぜひ、ご自身のマクロにこれらの高速化テクニックを適用し、業務効率の向上に役立ててください。
ADVERTISEMENT
超解決 Excel・Word研究班
企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Outlook】メールの受信が数分遅れる!リアルタイムで届かない時の同期設定と送受信グループ設定
- 【Outlook】予定表の「祝日」が表示されない!最新カレンダーの追加と二重表示の修正手順
- 【Outlook】「メール送信を5分遅らせる」設定!誤送信を防ぐ最強のディレイ機能
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
