Excel VBAでは、作業を自動化する中で「ファイルを上書き保存したい」という場面がよくあります。
マクロで処理を行ったあと、変更を保存して終了させることで、ユーザー操作を最小限に抑えられます。
この記事では、VBAでファイルを上書き保存する基本的な方法から、保存時の注意点、条件付き保存など応用的な内容までをわかりやすく解説します。初心者の方でも理解できるよう、サンプルコードも交えて説明しますので、ぜひ最後までご覧ください。
VBAで現在開いているブック(Workbook)を上書き保存するには、ThisWorkbook.Save
またはActiveWorkbook.Save
メソッドを使います。
Sub 上書き保存する()
ThisWorkbook.Save
End Sub
ThisWorkbook
は「このマクロが保存されているブック」を指します。一方で、ActiveWorkbook
を使うと、現在アクティブな(選択中の)ブックが対象になります。
Sub アクティブブックを保存する()
ActiveWorkbook.Save
End Sub
たとえば複数ファイルを開いていて、操作中のファイルを保存したい場合にはActiveWorkbook.Save
が便利です。
SaveAs
メソッドを使うことで、ファイル名や保存先を指定して保存できます。ただしこの方法は「上書き保存」というより「別名で保存する」動作です。
Sub 名前を付けて保存()
Dim ファイルパス As String
ファイルパス = "C:\Users\user\Documents\新しいファイル.xlsx"
ThisWorkbook.SaveAs Filename:=ファイルパス, FileFormat:=xlOpenXMLWorkbook
End Sub
上書き保存として使いたい場合、すでに同じ名前のファイルが存在する場合には、SaveAs
でも上書きが行われます。ただし、保存時の形式(FileFormat)に注意してください。
上書き保存をVBAで実行する際、いくつかの注意点があります。
マクロで変更されたブックを保存しようとしたとき、場合によっては以下のような警告が出ることがあります。
これを防ぐには、VBAで表示される警告を事前に無効化する必要があります。
Sub 警告なしで保存()
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
End Sub
DisplayAlerts = False
にすることで、保存に関する確認ダイアログが非表示になります。処理が終わったら、忘れずにTrue
に戻しておきましょう。
Excel VBAでは、ファイルに変更があったかどうかを確認してから保存することもできます。
Sub 変更があるときだけ保存()
If ThisWorkbook.Saved = False Then
ThisWorkbook.Save
End If
End Sub
Saved
プロパティがFalse
の場合は、保存されていない変更がある状態を意味します。これにより、無駄な保存処理を省くことができます。
自動化をさらに進めたい場合、上書き保存後にファイルを閉じる処理を追加することができます。
Sub 保存して閉じる()
ThisWorkbook.Save
ThisWorkbook.Close SaveChanges:=False
End Sub
ここで重要なのは、Close
メソッドの引数SaveChanges:=False
を設定しておくこと。すでに保存済みであるため、再度保存確認をしないように設定することで、ユーザーに余計な操作を求めません。
開いている他のブックをVBAから上書き保存する場合には、Workbooks("ファイル名.xlsx")
のように指定する方法があります。
Sub 他のブックを保存()
Workbooks("データ.xlsx").Save
End Sub
ただし、ブック名が正確でないとエラーになりますので、事前にWorkbook
オブジェクトを変数に格納するのが安全です。
Sub 他のブックを変数で保存()
Dim wb As Workbook
Set wb = Workbooks("データ.xlsx")
wb.Save
End Sub
保存時にファイルが開かれていない、または存在しないとエラーになります。以下のようにエラーハンドリングを加えることで、より安定したマクロになります。
Sub 安全に保存()
On Error GoTo エラー処理
Dim wb As Workbook
Set wb = Workbooks("データ.xlsx")
wb.Save
Exit Sub
エラー処理:
MsgBox "指定したファイルが開かれていません。"
End Sub
→ Save
メソッドでは読み取り専用のファイルは保存できません。SaveAs
で別名保存する必要があります。
→ 他のユーザーがファイルを開いている可能性があります。共有設定
を確認しましょう。
VBAを使ったファイルの上書き保存は、業務の効率化において非常に重要な要素です。基本的な使い方は簡単ですが、細かい部分まで考慮することでより安全でスマートなマクロが作れます。
本記事の内容をおさらいしましょう。
ThisWorkbook.Save
で上書き保存が可能DisplayAlerts
を使えば警告を非表示にできるSaved
プロパティで変更の有無を確認できる今後のマクロ作成にぜひ活用してみてください。