VBAで自動化 VBA一覧 ファイル・印刷操作 ファイル操作

【VBA】日付を含むファイル名で自動保存する方法|上書き防止と実務設計まで解説

Excelで業務をしていると、
「毎日同じファイルを作るが、日付ごとに残したい」
「上書き保存を防ぎたい」
「履歴として後から確認できるようにしたい」
と感じる場面は非常に多くあります。

日次報告書、月次集計、バックアップ用ファイル、帳票出力など、
同じ形式のExcelを日付違いで保存する業務は、ほぼすべての現場で発生します。
しかし実際の運用では、

  • 日付を付け忘れて上書きしてしまう
  • ファイル名の形式が人によってバラバラになる
  • どれが最新か分からなくなる

といったトラブルが頻繁に起こります。
これらの問題は、人の注意力に依存している限り、完全には防げません

そこで有効なのが、
Excel VBAを使って「日付を含むファイル名」で自動保存する仕組みです。
一度作ってしまえば、保存ミスや上書き事故をほぼゼロにできます。

この記事では、VBA初心者の方でも理解できるように、
日付付きファイル名で自動保存する方法を、
基本構造 → 実務向け設計 → よくある失敗と対策
の流れで丁寧に解説します。

✅ なぜ日付を含むファイル名で自動保存するのか

日付付き保存は「便利だから」行うものではありません。
実務では、事故防止と業務の安定運用に直結する重要な仕組みです。
ここを理解せずにコードを書くと、形だけのマクロになってしまいます。
まずは、日付付き保存が必要とされる理由を整理しましょう。
この前提を押さえることで、後続のコードの意味がはっきりします。

・上書き保存によるデータ消失を防ぐ

同じファイル名で保存を続けると、
過去のデータは容赦なく消えていきます。
一度上書きすると、元に戻せないケースも少なくありません。

日付を含めたファイル名にすることで、
物理的に上書きできない状態を作ることができます。


・履歴管理が自動でできる

ファイル名に日付が含まれていれば、

  • いつ作成されたファイルか分かる
  • 並び替えで時系列が崩れない

といったメリットがあります。
後から確認する業務ほど、効果を実感しやすい仕組みです。


✅ VBAでファイルを保存する基本構造を理解する

日付を含める前に、
VBAでファイルを保存する仕組みそのものを理解しておく必要があります。
ここを曖昧にしたまま進むと、動作の意味が分からなくなります。
まずは保存処理の基本を整理しましょう。

・VBAで使う保存命令は2種類

Excel VBAでファイルを保存する際、主に使うのは次の2つです。

  • Save
  • SaveAs

・SaveとSaveAsの決定的な違い

  • Save
    → 現在のファイルを上書き保存する
  • SaveAs
    別名で保存する

👉 日付付きファイル名で保存する場合は、必ず SaveAs を使います。


✅ 今日の日付を取得する方法と注意点

日付付きファイル名を作るためには、
まず「今日の日付」をVBAで取得する必要があります。
ここで初心者がつまずくケースは非常に多いです。
日付の扱い方を正しく理解しましょう。

・今日の日付を取得する基本コード

Sub GetToday()
    MsgBox Date
End Sub

・コード解説

  • Date
    → システムの日付(今日)を取得します。

ただし、このままでは ファイル名には使えません


・そのまま使えない理由

Date の表示には、通常「/」が含まれます。
Windowsでは、
ファイル名に / を含めることはできません。

そのため、
日付は必ず 文字列として加工 する必要があります。


✅ Format関数で日付をファイル名用に整形する

日付を安全にファイル名へ組み込むために使うのが、
Format関数です。
ここを理解すると、日付処理が一気に楽になります。

・Format関数の基本形

Format(値, "表示形式")

・日付を「YYYYMMDD」に変換する例

Sub FormatDateSample()
    MsgBox Format(Date, "yyyymmdd")
End Sub

・コード解説

  • "yyyymmdd"
    → 年4桁+月2桁+日2桁

この形式は、

  • ファイル名に使える
  • 並び替えに強い

という理由から、実務で最もよく使われます。

参考:【VBA】文字列に変換するFormat関数




✅ 日付を含むファイル名で保存する基本コード

ここから、実際に
日付付きファイル名で自動保存するコードを見ていきます。
まずは最小構成から理解しましょう。

・基本コード例

Sub SaveWithDate()

    Dim savePath As String
    Dim fileName As String

    savePath = ThisWorkbook.Path
    fileName = "報告書_" & Format(Date, "yyyymmdd") & ".xlsx"

    ThisWorkbook.SaveAs savePath & "\" & fileName

End Sub

・コード解説

  • ThisWorkbook.Path
    → このExcelファイルが保存されているフォルダ
  • "報告書_" & Format(Date, "yyyymmdd")
    → 固定文字列+日付
  • SaveAs
    → 別名で保存

このマクロを実行すると、
同じフォルダ内に日付付きファイルが作成されます。

参考:【VBA】フォルダ内のファイル名を順番に取得してExcelに書き出す方法|Dir・FSOで一覧化


✅ 保存先フォルダを指定する方法

実務では、
「保存場所を固定したい」
というケースがほとんどです。

・保存先を直接指定する例

savePath = "C:\ExcelData\Backup"

・注意点

  • フォルダが存在しないとエラーになる
  • パスの記述ミスが多い

実務では、
フォルダ存在チェックとセットで使うのが基本です。

参考:【VBA】別ファイルにデータ抽出する方法


✅ 同名ファイルの上書きを防ぐ安全設計

日付を含めても、
同じ日に何度も実行すると、
同名ファイルが存在する可能性があります。
ここを対策しないと、結局事故が起こります。

・ファイル存在チェックのコード例

If Dir(savePath & "\" & fileName) <> "" Then
    MsgBox "同じファイル名が既に存在します。"
    Exit Sub
End If

・この処理の意味

  • Dir()
    → ファイルの存在を確認

存在していれば、
処理を止めることで上書きを防ぎます。

参考:Excel VBAにおけるDir関数の活用法




✅ 時刻まで含めて完全に重複を防ぐ方法

より確実に重複を防ぎたい場合は、
日付+時刻を使います。

・時刻を含めたファイル名の例

fileName = "報告書_" & Format(Now, "yyyymmdd_hhnnss") & ".xlsx"

・メリット

  • 秒単位でユニーク
  • バックアップ・ログ用途に最適

✅ SaveAs使用時に注意すべき重要な仕様

SaveAsには、初心者が勘違いしやすい仕様があります。

・よくある勘違い

「コピーを作るだけだと思っていた」

実際には、
現在開いているブック自体が名前変更されます。


・実務での考え方

  • バックアップ専用として使う
  • 保存後は元ファイルを再度開く

用途を明確に分けることが重要です。

参考:Excel VBAでファイルを効率的に保存:SaveAsメソッドの使い方


✅ 実務でよくある失敗例

・Dateをそのまま連結する

"報告書_" & Date

/ が含まれてエラーになる。


・日本語形式の日付を使う

Format(Date, "yyyy年mm月dd日")

→ 管理しづらく、実務では不向き。


✅ 定期業務で使う場合の設計ポイント

日次・月次業務では、
自動保存を「仕組み」にすることが重要です。

  • ボタン1つで保存
  • 保存先と形式を固定
  • ファイル名ルールを統一

これだけで、ミスは激減します。




✅ まとめ:日付付き自動保存が業務を守る

  • 上書き事故を防げる
  • DateとFormatの理解が重要
  • SaveAsの仕様を理解する
  • 実務では重複対策が必須
  • 一度作れば長く使える

Excel VBAで
日付を含むファイル名で自動保存する仕組みは、
業務の安全性と再現性を大きく高めてくれます。

この考え方は、
バックアップ、帳票作成、ログ管理など、
多くの自動化処理の土台になります。

参考:【VBA】フィルター結果を新しいブックに保存する方法|抽出データを自動で別ファイル化する実務テクニック

    -VBAで自動化, VBA一覧, ファイル・印刷操作, ファイル操作