【Excelマクロ】日付ごとにファイルを自動保存する仕組み

日付ごとのファイルを作成する

毎日の作業をExcelでしていると、
「保存したファイルが上書きされてしまった」
「過去の状態を確認したいけど残っていない」
といったトラブルに出会うことがあります。

こうした問題を防ぐために、保存時に日付ごとのファイルを自動で作る仕組みを導入するのも一つです。

実装するメリット

  • 上書きによるデータ損失を防げる
  • 過去の作業履歴を簡単に残せる
  • ファイルのバージョン管理が楽になる
  • 自動化されているので、操作ミスも起きにくい

自動保存の仕組みをVBAで作る

次に紹介するコードは、ファイルを保存するタイミングで、日付付きのバックアップファイルを自動作成します。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim backupFolder As String
    Dim fileName As String
    Dim backupName As String

    ' バックアップを保存するフォルダ
    backupFolder = ThisWorkbook.Path & "¥バックアップ¥"

    ' フォルダが存在しなければ作成
    If Dir(backupFolder, vbDirectory) = "" Then
        MkDir backupFolder
    End If

    ' ファイル名と日付を組み合わせて保存名を作成
    fileName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1)
    backupName = backupFolder & fileName & "_" & Format(Date, "yyyymmdd") & ".xlsm"

    ' 自動で保存
    ThisWorkbook.SaveCopyAs backupName

End Sub

コードの解説

このコードは、保存する直前に動く Workbook_BeforeSave イベントを使っています。

  • backupFolder では、同じ場所に「バックアップ」フォルダを作成
  • fileName で拡張子を取り除いたファイル名を取得
  • Format(Date, "yyyymmdd") で今日の日付を「20250531」のような形式で取得
  • SaveCopyAs によって、現在のファイルをコピーして別名で保存

保存するたびに、自動で「今日の日付が付いたファイル」がバックアップとして残る仕組みです。

応用:さらに便利にする自動保存の工夫

基本の保存方法に慣れてきたら、応用のアイデアを取り入れて、さらに使いやすいバックアップの仕組みを作ってみましょう。

応用①:時間付きのファイル名で1日複数回保存

1日に何度も保存するようなブックでは、時間単位でファイルを保存しておくと、より細かく履歴が残せます。

コード変更点

backupName = backupFolder & fileName & "_" & Format(Now, "yyyymmdd_hhnnss") & ".xlsm"
  • Now を使うことで「日時」を取得
  • Format(Now, "yyyymmdd_hhnnss") により、
    20250531_142501 のような時刻付きのファイル名が作成されます
  • 1日で何度保存しても、それぞれのタイミングでバックアップが作成されるので、より安心

応用②:保存カウントをファイル名に含める

回数をもとにファイル名を付けたい場合は、カウントを変数で管理してファイル名に入れる方法もあります。

コード例(簡易的な例)

Static saveCount As Long
saveCount = saveCount + 1

backupName = backupFolder & fileName & "_v" & Format(saveCount, "000") & ".xlsm"
  • Static 変数を使えば、VBAが実行されるたびに値が保持され、毎回1ずつ増加します。
    Dimで行う方法もありますが、Dimの場合はマクロを実行するたびに1に戻ります。
    それに対し、Staticだと1回目のマクロで1で動いている場合、「ファイルを閉じるまで」にもう1回実行すると、2、3、4、5となります。ファイルを閉じるまで前の値が保存されます。
  • ファイル名が Report_v001.xlsm, Report_v002.xlsm のように保存されます。
  • 番号で履歴を管理したいときに便利な方法です。

応用③:フォルダ名に日付を使う

バックアップを フォルダ単位で日付ごとに分類する方法もあります。

コード例(フォルダ作成部分)

Dim dateFolder As String
dateFolder = backupFolder & Format(Date, "yyyymmdd") & "¥"

If Dir(dateFolder, vbDirectory) = "" Then
    MkDir dateFolder
End If

backupName = dateFolder & fileName & ".xlsm"
  • 日付ごとにフォルダを作成し、その中にファイルを保存します。
  • ファイル一覧がすっきり整理でき、探しやすくなります。
  • 業務日報や日単位で作業が完結するブックに向いています。

まとめ

Excelの保存操作にほんの少しのVBAを加えるだけで、日付や時間ごとのバックアップファイルを自動的に残すことができます。

  • Workbook_BeforeSave を使えば、保存前に自動処理が可能になります。
  • SaveCopyAs により元のファイルには一切手を加えずコピー保存できます。
  • InStrRev で拡張子前の切り出しが安全に行えます。
  • Format 関数を活用することで、日付や時間付きのファイル名が簡単に作成できます。
  • 応用テクニックを加えることで、用途や頻度に応じた最適な保存スタイルが選べます。

日々の業務で「昨日の状態に戻したい」「保存ミスを防ぎたい」といった場面に備えて、まずはこのコードを1つのブックに追加し、「保存するたびにバックアップされる機能」を体験してみてください。

必要に応じてアレンジすれば、より自分の業務に合った自動保存システムも実現できます。

コメント