【VBA】エクセルの自動計算を停止して処理を高速化する方法!

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
アイキャッチ

「エクセルの自動計算を停止して、高速化できないかな?」
このように思ったことはありませんか?


VBAの実行が遅くてイライラする…

大量のデータを扱うとExcelが固まる…

そんなときは 「Application.Calculation」を使用して
自動計算をオフにすると解決できるかもしれません!


この記事では、Application.Calculationを使用してエクセルの自動計算を停止する方法を紹介します。

自動計算を止めると、セルの値を変更しても即座に数式が再計算されないため、大量データの処理がサクサク進むようになります!

「VBAの高速化をしたい!」「エクセルの処理をもっとスムーズにしたい!」と考えている方は、ぜひ最後までご覧ください!😊✨


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

目次

この記事でできるようになること

スポンサーリンク

VBAで自動計算をオフにするとは? エクセルの自動計算について解説

そもそもエクセルってどのタイミングで
自動計算を行っているの?

Excelはデフォルトで、セルの値が変更されるたびに数式を自動的に計算します。
そのため、VBAで大量のデータを処理する際には、不要な計算が発生して処理速度が遅くなることがあります。

エクセルは常に数式を計算している? 実際に確認してみよう!

例えば、次のようなシートを考えてみましょう。

このシートでは、B列にRAND()関数を使い、ランダムな値を表示するように設定しています。

VBA実行時にエクセルはどのタイミングで再計算されるのか?

以下のコードを実行すると、For文がループするたびに、セルD2にカウンター「i」を表示します。

Sub TestCalculation()
    Dim i As Long
    
    For i = 1 To 5
        Range("D2").Value = i
    Next i
End Sub

このコードを実行すると、D2セルの値が1 → 2 → 3 → 4 → 5と更新されます。
しかし、それと同時に、B列のRAND関数の値も毎回変化することが分かります。

エクセルの処理タイミング結果

エクセルはVBAでセルの値を変更するたびに関数を再計算している!

この結果から分かることは、VBAのコードでセルの値を変更するたびに、Excelは数式を再計算するということです。

そのため、自動計算をオンにしたままVBAを実行すると、次のような問題が発生します。

  • VBAで大量のデータを処理すると、Excelが重くなりやすい
  • 無駄な計算が発生し、処理が遅くなる
  • 最悪の場合、Excelがフリーズしてしまうことも…!

この問題を解決する方法が、次に紹介する「Application.Calculation」を使った自動計算の停止」です!

VBAで自動計算を制御する「Application.Calculation」について解説

VBAのApplication.Calculationを使えば、Excelの自動計算を停止・再開して、処理速度を向上させることができます!

では、どのような設定があるのか、詳しく見ていきましょう!

Application.Calculationの構成

Application.Calculationには、以下の3つの設定値があります。

Application.Calculationの構成
スクロールできます
設定値内容特徴
xlCalculationAutomatic自動計算(デフォルト)セルの値が変更されるたびに即座に計算
xlCalculationManual手動計算Application.Calculateを実行するまで計算されない
xlCalculationSemiautomatic手動+依存関係の計算xlCalculationManualとほぼ同じだが、データテーブルの計算は自動

さらに詳細な仕様については、Microsoft公式のApplication.Calculation プロパティ (Excel)を参照してください。

ポイント
  • Application.Calculation = xlCalculationManual で自動計算を停止できる
  • 処理が完了したら、必ずApplication.Calculation = xlCalculationAutomaticで元に戻すこと重要!

【基本編】VBAで自動計算を停止・再開する方法

実際に処理を高速化する場合は、以下のように「自動計算を停止→処理→再開」の流れで実行します。

Sub FastProcessing()
    '// 自動計算をオフ
    Application.Calculation = xlCalculationManual
    
    '// ここで大量の処理を実行
    Dim i As Long
    For i = 1 To 10000
        Cells(i, 1).Value = i * 2
    Next i
    
    '// 自動計算をオンに戻す
    Application.Calculation = xlCalculationAutomatic
End Sub
処理の流れ
  1. Application.Calculation = xlCalculationManual で自動計算をオフ
  2. 10,000行に値を入力(通常より高速に実行される)
  3. Application.Calculation = xlCalculationAutomatic で計算を再開

このようにコードを記載すると、大量のデータ処理をする際にExcelの動作が軽くなります! 🚀

さらに速度改善したいなら… Application.ScreenUpdating も活用しよう!

Application.Calculation を使うと計算の回数を減らせますが、さらに Application.ScreenUpdating = False を組み合わせると、画面の描画を一時停止して、処理速度をさらに向上させることができます!

あわせて読みたい
VBA高速化の秘訣!Application.ScreenUpdatingの使い方と処理時間を比較 「VBAの処理が遅くて困っている…」そんな風に考えたことはありませんか? ・VBAをもっと高速化したい・処理中の画面のちらつきが気になる・Application.ScreenUpdating...
スポンサーリンク

VBAでApplication.Calculationを使用する際の注意点!ミスを防ぐポイントを解説

Application.Calculationを使うと、Excelの自動計算を制御でき、処理の高速化に役立ちます。
しかし、誤った使い方をすると、数式が正しく更新されない・意図しない結果になるといった問題が発生することがあります。

ここでは、Application.Calculationを安全に使用するための重要な注意点を解説します!

注意1 : 自動計算をオフにしたら、必ずオンに戻す!

VBAでApplication.Calculation = xlCalculationManualを設定すると、Excelの自動計算が停止します。
しかし、そのままにしておくと、VBA処理後も計算が行われず、数式の結果が更新されないままになってしまうという問題が発生します。

例えば、こんな問題が発生する!
  • VBAでデータを変更しても、Excelの計算結果が更新されない
  • SUMやVLOOKUPなどの数式が最新のデータを反映しなくなる
  • 「値がおかしい…?」と気づかずにミスを引き起こす可能性がある!

対策方法

VBA処理の最後に、必ずApplication.Calculation = xlCalculationAutomaticを記述しましょう!

Sub SafeCalculation()
    '// 自動計算をオフ
    Application.Calculation = xlCalculationManual
    
    '// ここで大量の処理
    Dim i As Long
    For i = 1 To 10000
        Cells(i, 1).Value = i * 2
    Next i
    
    '// 自動計算をオンに戻す(重要!)
    Application.Calculation = xlCalculationAutomatic
End Sub
ポイント
  • 計算モードを手動 (xlCalculationManual) にしたら、必ず xlCalculationAutomatic に戻す!
  • 処理後に手動でExcelを操作する場合、計算モードが「手動」のままだとミスにつながる!
  • VBAの後に計算結果をすぐに反映させたい場合は、次の「注意2」もチェック!

注意2 : 手動計算モードでは数式が更新されない!Application.Calculateを活用しよう

xlCalculationManual に設定すると、セルの値を変更しても数式が自動的に再計算されません!
そのため、VBAでデータを変更しても、SUMやVLOOKUPなどの数式が更新されず、古い計算結果のままになってしまいます。

例えば、こんな問題が発生する!
  • セルの値を変更したのに、SUMやVLOOKUPの結果が更新されない
  • データを変更してもピボットテーブルの計算が反映されない
  • Excelを手動で操作しても、数式がそのままになってしまう

※ 「注意1」との違いは、VBA処理が終わった後ではなく、「VBA処理中に計算を実行するかどうか」という点にあります!

対策方法

数式を更新する必要がある場合は、適切なタイミングでApplication.Calculateを呼び出しましょう!

Sub ManualCalculationExample()
    '// 自動計算をオフ
    Application.Calculation = xlCalculationManual
    
    '// データ処理
    Range("A1").Value = 100
    
    '// ここで手動計算を実行
    Application.Calculate
    
    '// 自動計算をオンに戻す
    Application.Calculation = xlCalculationAutomatic
End Sub
ポイント
  • xlCalculationManual を設定すると、セルを変更しても数式は更新されない!
  • 数式を最新の状態にするには、Application.Calculate を実行する必要がある!
  • VBA処理後に計算を再開するには「注意1」の方法をチェック!

注意3 : シート単位で計算する場合は「Worksheets(…).Calculate」を使う

Application.Calculate を使うと、ブック全体の計算が実行されます。
しかし、特定のシートだけ計算したい場合は、無駄な処理が発生し、VBAの動作が遅くなることがあります。

このような場合は、シート単位で計算を実行できる Worksheets("シート名").Calculate を活用しましょう!

対策方法

特定のシートだけ計算したい場合は、次のように記述します。

Sub SheetCalculationExample()
    '// 特定のシートのみ計算
    Worksheets("Sheet1").Calculate
End Sub
ポイント
  • Application.Calculate はブック全体を計算するため、不要なシートまで計算してしまう
  • 特定のシートだけ計算したいときは Worksheets("シート名").Calculate を使う!
  • 大規模なブックや複数シートがある場合、処理の最適化に役立つ!
スポンサーリンク

この記事のまとめ

この記事では、VBAの Application.Calculation を活用してExcelの自動計算を停止・再開する方法 を詳しく解説しました。

ポイント
  • VBAの Application.Calculation を使えば、無駄な再計算を減らし、処理を高速化できる!
  • xlCalculationManual に設定すると、セルの値を変更しても数式が更新されなくなるので注意!
  • Application.CalculateWorksheets(…).Calculate を活用すると、計算の制御がさらに柔軟に!

ポイントのおさらい

エクセルが自動計算するタイミングを考える!

エクセルはセルの値を変更するたびに、自動計算するタイミングということを確認しました。

👉 詳しくはこちら
⇒ 「VBAで自動計算をオフにするとは? エクセルの自動計算について解説」をもう一度見る

VBAで自動計算を制御する方法を習得!

VBAで自動計算を停止・再開するには、 Application.Calculation を活用します。

👉 詳しくはこちら
⇒ 「VBAで自動計算を制御する「Application.Calculation」について解説」をもう一度見る

VBAで自動計算をオフにする際の注意点を把握!

VBAで xlCalculationManual を設定すると、計算が実行されなくなるため、注意が必要です。
特に、次の3つのポイントに気をつけましょう!

  • 自動計算をオフにしたままにすると、数式が更新されずエラーの原因に!
  • 手動計算モードでは Application.Calculate を明示的に実行しないと計算が行われない!
  • ブック全体ではなく、特定のシートだけ計算する場合は Worksheets(…).Calculate を活用する!


👉 詳しくはこちら
⇒ 「VBAでApplication.Calculationを使用する際の注意点!ミスを防ぐポイントを解説」をもう一度見る

さらに学ぶために

VBAでの自動計算の制御を学んだら、次は 処理速度をさらに向上させるテクニックを学んでみましょう!
以下の機能や方法と組み合わせると、Excel作業をさらに効率化できます。

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「JavaScr...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次