vba 自動計算をオフ(またはオン)にする
In this Article
セルの値を更新するたびに、Excelはワークブックを再計算する処理を行います。Excelで直接作業する場合、99.9%の確率でこの処理を行いたいものです(ただし、非常に大きなワークブックを扱う場合は例外です)。しかし、これはVBAコードの速度を著しく低下させる原因でもあります。マクロの開始時に計算方法を手動に変更し、マクロの終了時に計算方法を自動に戻すのは良い取り組みです。ワークブックを再計算する必要がある場合は、手動でExcelに計算するよう指示することもできます。
自動計算をオフにする
xlManualに設定することで、マクロによる自動計算をオフにすることができます。以下のVBAコードを使用します。
Application.Calculation = xlManual
自動計算を元に戻す
自動計算を元に戻すにはxlAutomaticに設定します。
Application.Calculation = xlAutomatic
プロシージャの一番最初に自動計算を無効にして、最後に自動計算を再度有効にすることをお勧めします。このような感じになります。
自動計算を無効にするマクロの例
Sub Auto_Calcs_Example()
Application.Calculation = xlManual
'処理を記述する
Application.Calculation = xlAutomatic
End Sub
手動計算
自動計算が無効の場合、Calculateコマンドで強制的にExcelに再計算をさせることができます。
Calculate
また、個々のワークシートだけを再計算するように指示することもできます。
Worksheets("Sheet1").Calculate
また、VBAで範囲だけを再計算することもできます(VBAの計算方法についての記事を読む)。 以下は、マクロの中の様子です。
Sub Auto_Calcs_Example_Manual_Calc()
Application.Calculation = xlManual
'処理を記述する
'再計算
Calculate
'さらに処理を記述する
Application.Calculation = xlAutomatic
End Sub
VBAの設定 – コードの高速化
コードの高速化が目的なら、この他の設定も調整することを検討すべきです。 画面の更新を無効にすると、速度に大きな差が出ます。
Application.ScreenUpdating = False
また、ステータスバーをオフにすることでも、若干の違いが出てきます。
Application.DisplayStatusBar = False
ワークブックにイベントが含まれている場合、プロシージャの開始時にイベントを無効にする必要があります(コードのスピードアップと無限ループを防ぐためです!)。
Application.EnableEvents = False
最後に、Excelが改ページを再計算しようとすると、VBAコードが遅くなることがあります(注:すべてのプロシージャが影響を受けるわけではありません)。 DisplayPageBreaksをオフにするには、次のコードを使用します。
ActiveSheet.DisplayPageBreaks = False
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro - A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!Learn More!