VBAで日付付きバックアップを作る方法|SaveCopyAsで元ファイルを変えずにコピー保存

VBAでバックアップを作るには、SaveCopyAs を使います。元のファイルはそのままで、日付付きのコピーだけを別の場所に保存できます。ボタンに登録しておけば、好きなタイミングでワンクリックでバックアップが取れます。

この記事では、次の内容を順番に解説します。

  • SaveCopyAsで日付付きバックアップを作る基本のコード
  • コードの各部分の解説
  • 保存するたびに自動でバックアップする方法

日付付きバックアップを作るコードは?

次のコードを実行すると、今開いているファイルと同じ場所に「ファイル名_20250601.xlsm」という形でバックアップが保存されます。

Sub CreateBackup()

    Dim backupPath As String
    Dim fileName As String
    Dim backupName As String

    ' 現在のファイル名を取得する
    fileName = ThisWorkbook.Name

    ' 拡張子を除いたファイル名 + 日付 + 拡張子でバックアップ名を作る
    backupName = Left(fileName, InStrRev(fileName, ".") - 1) & "_" & Format(Date, "yyyymmdd") & ".xlsm"

    ' 保存先のパスを作る(今開いているファイルと同じフォルダ)
    backupPath = ThisWorkbook.Path & "¥" & backupName

    ' 元のファイルはそのままで、コピーだけ保存する
    ThisWorkbook.SaveCopyAs backupPath

    MsgBox "バックアップを保存しました:" & vbCrLf & backupName

End Sub

コードの流れ

  • ThisWorkbook.Name:今開いているファイルの名前を取得します(例:売上管理.xlsm)。
  • Left(fileName, InStrRev(fileName, ".") - 1):ファイル名から拡張子を除いた部分を取り出します(例:売上管理)。
  • Format(Date, "yyyymmdd"):今日の日付を「20250601」の形式で取得します。
  • ThisWorkbook.Path:今開いているファイルのフォルダのパスを取得します。
  • SaveCopyAs:元のファイルを変えずに、コピーだけを別の名前で保存します。

SaveCopyAsとSaveAsの違いは?

  • SaveCopyAs:今開いているファイルはそのままで、コピーだけを別の場所に保存する。バックアップ用途に最適。
  • SaveAs:今開いているファイルが新しいファイル名に切り替わる。元のファイルは閉じられる。

バックアップを取りたい場合は必ず SaveCopyAs を使いましょう。

保存するたびに自動でバックアップするには?

上のマクロを手動で実行するのではなく、ファイルを保存するたびに自動で動かしたい場合は、Workbook_BeforeSave イベントと組み合わせます。

' ThisWorkbookモジュールに貼り付ける
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Call CreateBackup
End Sub

このコードをVBAの編集画面(Alt+F11)→「ThisWorkbook」に貼り付けると、Ctrl+Sで保存するたびに自動でバックアップが作られます。

まとめ

  • 基本のコードSaveCopyAs で元のファイルを変えずにコピーを保存する。
  • ファイル名Format(Date, "yyyymmdd") で日付を入れると管理しやすい。
  • 自動化Workbook_BeforeSave と組み合わせると保存のたびに自動でバックアップされる。
  • SaveCopyAsとSaveAsの違い:バックアップにはSaveCopyAsを使う。SaveAsは開いているファイル自体が切り替わる。

よくある質問

同じ日に何度もバックアップを取ると上書きされる?

はい、同じ日付のファイル名になるので上書きされます。1日に何度もバックアップを取りたい場合は、日付だけでなく時刻も入れましょう。Format(Now, "yyyymmdd_hhnnss") にすると「20250601_142501」のように時刻まで入ったファイル名になります。

バックアップを別のフォルダに保存したい場合は?

backupPath の部分を変えるだけです。例:backupPath = "C:¥backup¥" & backupName のように保存先のフォルダのパスを直接指定します。指定したフォルダが存在しない場合はエラーになるので、あらかじめフォルダを作っておいてください。

バックアップが増えすぎた場合はどうする?

古いバックアップは手動で定期的に削除するのが一番シンプルです。フォルダを日付ごとに分けて管理したり、一定期間より古いファイルを自動削除するマクロを追加したりすることもできます。

バックアップ先のフォルダがないとどうなる?

エラーになります。事前にフォルダを作っておくか、VBAの中で If Dir(フォルダパス, vbDirectory) = "" Then MkDir フォルダパス のようにフォルダがなければ自動で作る処理を追加しておくと安全です。

マクロボタンに登録して使いたい場合は?

Excelのシート上にボタンを配置して、CreateBackup マクロを割り当てるとワンクリックでバックアップが取れます。「開発」タブ→「挿入」→「ボタン(フォームコントロール)」からボタンを作成して、マクロの割り当てで CreateBackup を選択してください。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール