Contents
完成イメージ(Before / After)
Before(実行前)
毎回「ファイル」→「上書き保存」→「閉じる」を手動で操作している。複数ブックがあると、保存し忘れや上書きミスが怖い。
After(実行後 — 最小版)
VBAを実行すると、ブックが上書き保存される。MsgBoxで「保存しました」と表示される。
After(実行後 — 実務版)
保存先フォルダに日付付きファイルが自動作成される。
| 保存先フォルダ | ファイル名 |
|---|---|
| C:\Users\tanaka\Desktop\バックアップ\ | 売上報告_20260313.xlsm |
日付付きファイル名でバックアップ保存 → MsgBoxで保存先パスを通知 → 元ブックを閉じる。一連の操作がワンクリックで完了する。
実行前の準備(必ず読むこと)
バックアップを取る
SaveAsで名前を付けて保存する場合、DisplayAlerts = False を設定すると同名ファイルが確認なしで上書きされます。
実行前に、元ファイルのコピーを取っておくこと。特に実務版を初めて使う場合は、テスト用のファイルで動作確認してから本番ファイルに適用すること。
Excelをマクロ有効ブック(.xlsm)で保存する
- Excelを開く(新規でも既存でもOK)
- 「ファイル」→「名前を付けて保存」
- ファイルの種類を 「Excel マクロ有効ブック (*.xlsm)」 に変更して保存
.xlsx のままだとマクロが保存されない。必ず .xlsm にすること。
手順(コピペ → 実行まで約5分)
VBEを開く
Alt + F11 キーを押すとVBE(Visual Basic Editor)が開く。
一般的にはAlt + F11で開けるが、企業のセキュリティ設定でVBAが無効化されている場合は、IT部門に確認すること。
標準モジュールを挿入する
- VBEのメニュー「挿入」→「標準モジュール」をクリック
- 右側に白い画面(コードウィンドウ)が表示される
コードを貼り付けて実行する
- 下の「コード(最小版)」をコピーして、コードウィンドウに貼り付ける
- Alt + F8 を押す(または VBE上で F5)
- マクロ名を選択して「実行」
- MsgBoxで「保存しました」と表示される
コード(最小版)— ブックを上書き保存して閉じるだけ
まずはこれでブックの保存を確認する。閉じる処理はコメントアウトしてある。 動作確認できたらコメントを外す。
Sub SaveAndCloseBook()
' ブックを上書き保存する
ThisWorkbook.Save
MsgBox "上書き保存しました。", vbInformation
' ★ 動作確認できたら下の行のコメント( ' )を外すとブックが閉じる
' ThisWorkbook.Close
End Sub
ThisWorkbook.Save はマクロが書かれているブック自身を上書き保存する。 別のブックを保存したい場合は Workbooks("ファイル名.xlsx").Save のようにブック名を指定する。
新規ブック(一度も保存していないブック)で実行した場合: Save を使うと「名前を付けて保存」ダイアログが表示される。新規ブックの場合は SaveAs でファイル名を指定して保存すること。
閉じる処理について: ThisWorkbook.Close を実行するとマクロ自身が終了する。Close の後に書いたコードは実行されない。そのため、Closeは必ず処理の最後に配置すること。
SaveChanges引数:
Workbook.Close SaveChanges:=True— 保存してから閉じるWorkbook.Close SaveChanges:=False— 保存せずに閉じる(変更を破棄)- 引数を省略 — 「保存しますか?」ダイアログが表示される
コード(実務版)— 日付付きバックアップ保存→元ブックを閉じる
最小版で保存の動作を確認できたら、実務版に進む。日付付きファイル名でバックアップ保存し、元ブックを閉じる一連の処理を行う。
保存先フォルダが存在しない場合は自動作成する。 フォルダの自動作成が不要な場合は、該当部分をコメントアウトすること(記事029「フォルダを自動作成して振り分ける方法」も参照)。
Sub BackupSaveAndClose()
Dim saveFolderPath As String
Dim originalName As String
Dim baseName As String
Dim extension As String
Dim dateStr As String
Dim newFileName As String
Dim newFilePath As String
Dim dotPos As Long
' ★ ここを保存先フォルダのパスに書き換える(末尾の \ を忘れずに)
saveFolderPath = "C:\Users\(ユーザー名)\Desktop\バックアップ\"
' --- 保存先フォルダの存在チェック ---
' ※ MkDir は1階層のみ作成可能。多階層フォルダの作成は記事029を参照
If Dir(saveFolderPath, vbDirectory) = "" Then
MkDir saveFolderPath
End If
' --- 日付付きファイル名を生成 ---
originalName = ThisWorkbook.Name ' 例: 売上報告.xlsm
dotPos = InStrRev(originalName, ".")
If dotPos > 0 Then
baseName = Left(originalName, dotPos - 1) ' 例: 売上報告
extension = Mid(originalName, dotPos) ' 例: .xlsm
Else
baseName = originalName
extension = ".xlsm"
End If
dateStr = Format(Now, "yyyyMMdd") ' 例: 20260313
newFileName = baseName & "_" & dateStr & extension ' 例: 売上報告_20260313.xlsm
newFilePath = saveFolderPath & newFileName
' --- バックアップ保存(名前を付けて保存) ---
On Error GoTo ErrorHandler
Application.DisplayAlerts = False ' 同名ファイルの上書き確認をスキップ
' ※ SaveAs後は ThisWorkbook.Name が新しいファイル名に変わる
ThisWorkbook.SaveAs Filename:=newFilePath, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled ' 52 = .xlsm
Application.DisplayAlerts = True
MsgBox "バックアップ保存が完了しました。" & vbCrLf & vbCrLf & _
"保存先: " & newFilePath, vbInformation
' ★ 動作確認できたら下の行のコメント( ' )を外すとブックが閉じる
' ThisWorkbook.Close SaveChanges:=False ' すでに SaveAs で保存済み
Exit Sub
ErrorHandler:
Application.DisplayAlerts = True ' エラー時も必ず True に戻す
MsgBox "保存中にエラーが発生しました。" & vbCrLf & _
"エラー内容: " & Err.Description, vbExclamation
' エラー処理の詳細は記事022「エラー処理で止まらないマクロを作る方法」も参照
End Sub
コードの流れ:
- フォルダ存在チェック — 保存先フォルダがなければ自動作成(記事029「フォルダを自動作成して振り分ける方法」参照)
- 日付付きファイル名を生成 — 元のファイル名 +
_20260313+ 拡張子 - SaveAsでバックアップ保存 —
DisplayAlerts = Falseで上書き確認をスキップ。FileFormat:=52 でマクロ有効ブックとして保存 - 元ブックを閉じる — すでに SaveAs で保存済みのため
SaveChanges:=Falseで閉じる(コメントアウト状態で提供)
FileFormat定数の一覧:
| 定数名 | 値 | 拡張子 | 用途 |
|---|---|---|---|
| xlOpenXMLWorkbook | 51 | .xlsx | マクロなしブック |
| xlOpenXMLWorkbookMacroEnabled | 52 | .xlsm | マクロ有効ブック |
| xlCSV | 6 | .csv | CSV形式 |
| xlWorkbookDefault | 51 | .xlsx | デフォルト |
DisplayAlerts = False の注意点: この設定を False にすると、同名ファイルの上書き確認だけでなく、Excelのすべての警告ダイアログが非表示になる。エラーが発生しても警告が出ないため、処理が終わったら必ず True に戻すこと。このコードではエラーハンドラ(ErrorHandler)でも True に戻す設計にしている。
SaveAs実行後の注意点: SaveAs を実行すると、Excelが認識しているファイル名が新しい名前に変わる。 元のファイル名のまま作業を続けたい場合は、SaveAsではなく FileCopy でコピーしてから Save する方法もある(記事017「指定フォルダのファイルを自動バックアップする方法」参照)。
同日に複数回実行する場合: Format(Now, "yyyyMMdd") は日付のみのため、同日に複数回実行すると同名ファイルが上書きされる。時分秒まで含めたい場合は Format(Now, "yyyyMMdd_HHmmss") に変更する。
よくある落とし穴5選
| # | 症状 | 原因 | 対策 |
|---|---|---|---|
| 1 | SaveAsで「パスが見つかりません」エラー | 保存先フォルダが存在しない | SaveAs前に Dir(フォルダパス, vbDirectory) でフォルダの存在を確認する。実務版では自動作成している。記事074(ファイルやフォルダの存在を確認してから処理する方法)も参照 |
| 2 | .xlsmで保存したのにマクロが消えた | FileFormatに 51(.xlsx)を指定してしまった | マクロ有効ブックは FileFormat:=52(xlOpenXMLWorkbookMacroEnabled)を指定する。定数名を使うと間違いにくい |
| 3 | 同名ファイルが確認なしで上書きされた | DisplayAlerts = False の状態で SaveAs を実行した |
DisplayAlerts = False は必要な場面でのみ使い、処理後に必ず True に戻す。上書きが心配な場合は事前に Dir でファイルの存在を確認する |
| 4 | DisplayAlerts = False が戻らず、他の処理で警告が出なくなった | エラー発生時に True に戻すコードが実行されなかった | On Error GoTo でエラーハンドラに飛ばし、必ず True に戻す。記事022(エラー処理で止まらないマクロを作る方法)も参照 |
| 5 | ThisWorkbook.Close の後のコードが実行されない | マクロが書かれたブック自身を閉じたためマクロの実行が終了した | ThisWorkbook.Close は必ず処理の最後に配置する。Closeの後にコードを書いても実行されない |
FAQ
Q1: 上書き保存(Save)と名前を付けて保存(SaveAs)の違いは?
Save は同じファイル名・同じ場所に上書き保存する。SaveAs はファイル名や保存先、ファイル形式を指定して保存する。バックアップを残したい場合や、別の形式(CSV等)で保存したい場合は SaveAs を使う。
Q2: マクロが書かれたブック自身を閉じるとどうなる?
ThisWorkbook.Close を実行するとマクロ自身が終了する。Close の後に書いたコードは実行されない。MsgBoxやログ出力はCloseの前に配置すること。
Q3: 保存せずに閉じたい場合は?
Workbook.Close SaveChanges:=False で変更を破棄して閉じられる。保存ダイアログも表示されない。ただし、誤って実行すると編集内容がすべて失われるため注意。
Q4: 複数のブックを一括で保存して閉じたい
For Each wb In Workbooks でループすれば可能。ただしマクロが書かれたブック自身(ThisWorkbook)を途中で閉じるとマクロが止まるため、ThisWorkbook は最後に処理する必要がある。業務に合わせたカスタマイズはココナラで相談できます。
Q5: ファイルを開いてから処理して保存・閉じるまでを一括でやりたい
記事073「Excelファイルを自動で開いて処理して閉じる方法」で、ファイルを開く部分を解説している。開く(073)→ 処理 → 保存・閉じる(この記事)を組み合わせることで一連の自動化が可能。
まとめ
この記事で、VBAによるブックの上書き保存・名前を付けて保存・閉じる操作を自動化できるようになった。
- 最小版:
ThisWorkbook.Saveで上書き保存するだけ。まずはこれで動作確認 - 実務版:日付付きファイル名でバックアップ保存 → 元ブックを閉じる。保存先フォルダの自動作成・エラーハンドリング付き
DisplayAlerts = False を使う場合は、必ず True に戻すことを忘れないこと。
関連記事:
- ファイルを開く操作を自動化したい場合は「Excelファイルを自動で開いて処理して閉じる方法」(記事073)を参照
- バックアップの仕組みをもっと詳しく知りたい場合は「指定フォルダのファイルを自動バックアップする方法」(記事017)を参照
- ファイルやフォルダの存在確認は「ファイルやフォルダの存在を確認してから処理する方法」(記事074)を参照
- フォルダの自動作成は「フォルダを自動作成して振り分ける方法」(記事029)を参照
- エラー処理の基本は「エラー処理で止まらないマクロを作る方法」(記事022)を参照
もっとカスタマイズしたい場合
「複数ブックを一括で保存・閉じたい」「特定条件でファイル名を自動生成したい」「保存と同時にPDF出力もしたい」など、業務に合わせたカスタマイズが必要な場合は、ココナラで相談できます。
相談時に以下の情報があるとスムーズです:
- Excel のバージョン / OS
- 保存先のフォルダ構成
- ファイル名の命名規則(日付、連番など)
- 保存形式(.xlsm / .xlsx / .csv / .pdf)


コメント