手動計算、自動計算等の設定関連。QATやリボンに登録して使用すると便利
(Microsoft365 64bit環境推奨)
New Base Macro Book をコピーしてモジュールを追加して使用します
- 【Alt】+【F11】キーを押下し、VBE画面を出す。
- 【挿入】タブから【標準モジュール】を選択し、標準モジュールを作成。
- 下記ボックス内をコピーし、標準モジュールに貼り付ける。
- モジュール名を【E02_Calc_Save】に変更する。
モジュール名:E02_Calc_Save
Option Explicit
'**********************************************************
' 処理名:StopAllSheetCalculation(Main以外の計算を停止)
'
' 概要 :Excel全体を手動計算に設定し、Mainシート以外の計算を止める。
' 重たいブックの負荷軽減に有効。
'
' 備考 :EnableCalculation=False により、再計算対象から除外。
' ブックを閉じると全シートが True に戻るため、再実行が必要。
'**********************************************************
Sub StopAllSheetCalculation()
Dim ws As Worksheet
'▼アプリケーション全体を手動計算に設定
Application.Calculation = xlCalculationManual
'▼各シートの計算設定(Mainのみ計算可)
For Each ws In ThisWorkbook.Worksheets
If ws.Name = "Main" Then
ws.EnableCalculation = True
Else
ws.EnableCalculation = False
End If
Next ws
End Sub
'**********************************************************
' 処理名:RecalculateThenStop(全シート再計算 → Main以外の計算を停止)
'
' 概要 :一度全シートの EnableCalculation を True にして再計算を実行。
' その後、Main シート以外の計算を止めて負荷を抑える。
'
' 備考 :
' ・EnableCalculation = False に設定されたシートは、再計算対象から除外される。
' ・Application.Calculate を実行しても、EnableCalculation=False のシートは再計算されない。
' ・このため、事前に全シートを True にしてから再計算する必要がある。
' ・ブックを閉じると EnableCalculation はすべて True に戻る。
' ▼再計算後は手動計算モードに戻す
' ・以降のセル変更やブック操作では自動再計算されなくなる
' ・重たいブックの負荷を抑えるための静かな設定
' ・必要に応じて Application.Calculate や ws.Calculate で明示的に再計算する
' Application.Calculation = xlCalculationManual
'**********************************************************
Sub RecalculateThenStop()
Dim ws As Worksheet
'▼全シートの EnableCalculation を True に設定(再計算対象に含める)
For Each ws In ThisWorkbook.Worksheets
ws.EnableCalculation = True
Next ws
'▼全シートを強制再計算(手動モードでも有効)
Application.Calculate
'▼Main 以外の計算を停止(EnableCalculation=False)
Call StopAllSheetCalculation
'▼再計算後は手動計算モードに戻す
Application.Calculation = xlCalculationManual
End Sub
'**********************************************************
' 処理名:RecalculateActiveSheet(アクティブシートのみ再計算)
'
' 概要 :現在アクティブなシートの EnableCalculation を True に設定し、
' そのシートだけを再計算する。
'
' 備考 :
' ・EnableCalculation = False のシートは再計算対象から除外される。
' ・Application.Calculate → 全体再計算(対象外のシートは無視される)
' ・ActiveSheet.Calculate → アクティブなシートのみ再計算
' ・手動計算モードでも有効
' ・ブックを閉じると EnableCalculation はすべて True に戻る
' ▼再計算後は手動計算モードに戻す
' ・以降のセル変更やブック操作では自動再計算されなくなる
' ・重たいブックの負荷を抑えるための静かな設定
' ・必要に応じて Application.Calculate や ws.Calculate で明示的に再計算する
' Application.Calculation = xlCalculationManual
'**********************************************************
Sub RecalculateActiveSheet()
'▼アクティブシートの再計算を許可(対象に含める)
ActiveSheet.EnableCalculation = True
'▼アクティブシートのみ再計算(手動モードでも有効)
ActiveSheet.Calculate
'▼再計算後は手動計算モードに戻す
Application.Calculation = xlCalculationManual
End Sub
'**********************************************************
'▼EnableCalculation = False の効果
'
'・そのシートは再計算対象から除外される
'・Application.Calculate を実行しても再計算されない
'・自動計算モード(xlCalculationAutomatic)でも再計算されない
'・再計算させたい場合は、EnableCalculation=True に戻す必要がある
'・ブックを閉じると、すべてのシートが True に戻る(永続ではない)
'【Excelの計算モードとデータテーブルの違いについてメモ】
'
'▼Application.Calculation の設定値と意味
'
'xlCalculationAutomatic
' → 自動計算モード。
' セル変更・ブック操作のたびに全シートの数式が再計算される。
'
'xlCalculationManual
' → 手動計算モード。
' セル変更では再計算されず、明示的に .Calculate を呼ぶ必要がある。
'
'xlCalculationSemiautomatic
' → セミ自動モード。
' 通常の数式は自動計算されるが、
' 「データテーブル(What-If分析)」だけは手動で再計算される。
'
'*** 各シートには EnableCalculation プロパティがあり、
' これを False にするとそのシートは再計算対象から除外されます。
'
'----------------------------------------------------------
'▼「データテーブル」とは?
'
'※ Ctrl+T で作る Excelテーブル(ListObject)とは別物!
'
'Excelの「データテーブル」は、What-If分析の機能の一部。
'メニュー:[データ] → [What-If分析] → [データテーブル]
'
'目的:
' → 数式に対して、複数の入力値を試して結果を一覧表示する。
'
'使用例:
' → ローン返済額を金利ごとに一覧表示したいときなど。
'
'特徴:
' ・行方向/列方向に変化させたい値を指定できる
' ・数式の結果が自動で一覧表示される
' ・再計算が重くなるため、セミ自動モードでは手動実行になる
'
'備考:
' → Application.Calculate を使えば手動モードでも強制再計算できる
'***************************************************************************************
'+++*********************************************************+++
' マクロでブックを保存(再計算+画面制御付き)
'+++*********************************************************+++
Sub SaveWorkbook_WithRecalcAndControl()
'===================================
' 画面制御セット(更新停止)
'===================================
With Application
.ScreenUpdating = False ' 画面描画停止
.EnableEvents = False ' イベント動作停止
.DisplayAlerts = False ' 警告非表示
.StatusBar = "保存処理中です…" ' ステータスバー表示
.Calculation = xlCalculationManual ' 計算を手動に設定(必要に応じて)
End With
'===================================
' 再計算(基本は実行)
'===================================
Application.Calculate ' 通常の再計算
' Sheet1.Calculate ' 指定シートのみ再計算(例)
' Application.CalculateFull ' 依存関係も含めて完全再計算(重い)
' Application.CalculateFullRebuild ' 最も重い再構築再計算
'===================================
' 保存処理
'===================================
ThisWorkbook.Save ' 現在のブックを保存
'===================================
' 画面制御セット(更新再開)
'===================================
Call Updating ' 更新再開
MsgBox "再計算して保存しました!", vbInformation
End Sub
'+++*********************************************************+++
' マクロでブックを保存(再計算せずに)
'+++*********************************************************+++
Sub SaveWorkbook_WithoutRecalc()
'===================================
' 画面制御セット(更新停止)
'===================================
With Application
.ScreenUpdating = False ' 画面描画停止
.EnableEvents = False ' イベント動作停止
.DisplayAlerts = False ' 警告非表示
.StatusBar = "保存処理中です…" ' ステータスバー表示
.Calculation = xlCalculationManual ' 計算を手動に設定(必要に応じて)
End With
'===================================
' 再計算(基本は実行)
'===================================
' Application.Calculate ' 通常の再計算
' Sheet1.Calculate ' 指定シートのみ再計算(例)
' Application.CalculateFull ' 依存関係も含めて完全再計算(重い)
' Application.CalculateFullRebuild ' 最も重い再構築再計算
'===================================
' 保存処理
'===================================
ThisWorkbook.Save ' 現在のブックを保存
'===================================
' 画面制御セット(更新再開)
'===================================
Call Updating ' 更新再開
MsgBox "再計算せずに保存しました!", vbInformation
End Sub


コメント