Microsoft 365のExcelでは、OneDriveやSharePointに保存されたファイルに対して「自動保存」が標準でオンになっています。これは共同編集や不意のシャットダウンに非常に便利な機能ですが、VBAマクロで大量のデータを処理する際には、一つ一つの変更が即座に保存されてしまい、処理速度の低下や不要なバージョン履歴の生成につながることがあります。
この記事では、マクロ実行中にブックの自動保存を一時的にオフにし、処理が終わったら元の状態に戻すという、安全で推奨される方法を解説します。
.AutoSaveOn プロパティとは?
.AutoSaveOnは、Workbookオブジェクトが持つプロパティで、ブックの自動保存が現在有効(True)か無効(False)かを示します。
このプロパティは、OneDriveまたはSharePoint上に保存されているブックでのみ有効です。ローカルに保存されているファイルに対して操作しようとするとエラーになるため、注意が必要です。
このプロパティの値をVBAで変更することで、自動保存をプログラムで制御できます。
完成したVBAコード(推奨パターン)
マクロの実行中だけ自動保存をオフにし、マクロ終了時に元の設定に戻すのが、ユーザーの設定を尊重する安全な方法です。
Sub ProcessDataWithAutoSaveControl()
Dim targetBook As Workbook
Dim wasAutoSaveOn As Boolean
' 現在アクティブなブックを操作対象に設定
Set targetBook = ActiveWorkbook
' --- 1. 自動保存が利用可能なブックか確認 ---
' (ローカルファイルなどでエラーになるのを防ぐ)
On Error Resume Next
wasAutoSaveOn = targetBook.AutoSaveOn
If Err.Number <> 0 Then
' このブックは自動保存の対象外なので、以降の処理は不要
Else
' --- 2. 自動保存の元の状態を記憶し、一時的にオフにする ---
If wasAutoSaveOn = True Then
targetBook.AutoSaveOn = False
Debug.Print "自動保存を一時的にオフにしました。"
End If
End If
On Error GoTo 0
' ======================================================
' === ここに、時間のかかる本来のメイン処理を記述 ===
' (例: 大量のデータを書き換える、複雑な計算を行うなど)
Application.StatusBar = "重い処理を実行中..."
Application.Wait Now + TimeValue("00:00:03") ' 処理のダミー
Application.StatusBar = False
' ======================================================
' --- 3. 自動保存の状態を元に戻す ---
' マクロ実行前に自動保存がオンだった場合のみ、オンに戻す
If wasAutoSaveOn = True Then
targetBook.AutoSaveOn = True
Debug.Print "自動保存を元の「オン」の状態に戻しました。"
End If
MsgBox "処理が完了しました。"
End Sub
コードのポイント解説
① 事前の状態確認と条件
On Error Resume Next
wasAutoSaveOn = targetBook.AutoSaveOn
If Err.Number <> 0 Then
' ...
End If
On Error GoTo 0
ローカルに保存されたファイル(自動保存の対象外)で.AutoSaveOnプロパティを操作しようとするとエラーが発生します。On Error Resume Nextを使うことで、このエラーを無視して処理を続行させ、エラーが発生しなかった(=自動保存が利用可能な)場合のみ、後続の処理に進むようにしています。
② 状態の記憶と一時的なOFF
wasAutoSaveOn = targetBook.AutoSaveOn
' ...
If wasAutoSaveOn = True Then
targetBook.AutoSaveOn = False
End If
このコードの最も重要な部分です。まず、wasAutoSaveOnという変数に、マクロ実行前の自動保存のオン/オフ状態(TrueかFalse)を記憶させます。その後、もしオンであったなら、targetBook.AutoSaveOn = Falseで一時的にオフに切り替えます。
③ 状態の復元
If wasAutoSaveOn = True Then
targetBook.AutoSaveOn = True
End If
メインの処理がすべて完了した後、①で記憶しておいた元の状態wasAutoSaveOnを基に、自動保存の設定を復元します。
wasAutoSaveOnがTrueだった(=元々オンだった)場合のみ、自動保存をオンに戻します。これにより、ユーザーが元々オフにしていた設定を、マクロが勝手にオンにしてしまうのを防ぐことができます。
まとめ
VBAマクロで自動保存を安全に制御するための推奨パターンは、以下の通りです。
- 処理の開始前に、ブックの
.AutoSaveOnの現在の状態を変数に記憶しておく。 - もし自動保存がオンなら、一時的にオフ (
.AutoSaveOn = False) にする。 - 目的のメイン処理を実行する。
- 処理の最後に、記憶しておいた変数を基に、自動保存の状態を元の設定に復元する。
この手順を踏むことで、マクロのパフォーマンスを確保しつつ、ユーザーの元の設定を尊重する、親切で安定したツールを作成することができます。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
