日付を付けた名前でバックアップ保存する
コードを保存した.xlsmブックを、日時入りの別の.xlsmファイルにコピー保存します。開いているブックの名前は変わりません。
実行前に確認
- SaveCopyAsは形式を変換しません。この例は.xlsm専用です。未保存の編集内容もコピーに含まれますが、元のブック自体を上書き保存する処理ではありません。
- 日時だけでは絶対に重複しないとは限りません。同名チェックを省略しないでください。
1サンプルコード
Sub バックアップを保存する()
Dim backupPath As String
If ThisWorkbook.Path = "" Or ThisWorkbook.FileFormat <> xlOpenXMLWorkbookMacroEnabled Then
MsgBox "先にローカルフォルダーへ.xlsm形式で保存してください"
Exit Sub
End If
backupPath = ThisWorkbook.Path & "\backup_" & _
Format(Now, "yyyymmdd_hhmmss") & ".xlsm"
If Dir(backupPath) <> "" Then
MsgBox "同名ファイルがあるため中止します"
Exit Sub
End If
ThisWorkbook.SaveCopyAs backupPath
MsgBox "バックアップを保存しました"
End Sub図で見るファイルの変化
イメージ図コードの動きを表した概念図です。実際のExcel画面ではありません。
変更前:保存先フォルダー
元の.xlsmブックがある 同名のbackup_ファイルはない
マクロ:コピー先を作る
ThisWorkbook.Path\backup_yyyymmdd_hhmmss.xlsm 日時部分は実行時のNow
マクロ:SaveCopyAs
現在の内容を同じフォルダーへコピー保存する
変更後:元+バックアップ
元の.xlsmは残る backup_実行日時.xlsm が増える
未保存・.xlsm以外・同名ファイルありなら中止します。未保存の編集もコピーに含みますが、元ブックの上書き保存はしません。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
Windows版のデスクトップExcelで練習用ブックを.xlsm形式で保存します。Alt+F11→[挿入]→[標準モジュール]に、この例だけを貼り付けます。
- 2
練習ブックをローカルフォルダーへ.xlsm形式で保存します。この例の保存先は同じフォルダーです。通常はパスを書き換える必要はありません。
- 3
実行するSubの内側にカーソルを置き、F5キーを押します。
- 4
同じフォルダーにbackup_年月日_時分秒.xlsmができます。開いているブックの名前は変わりません。同名のコピーが既にある場合は中止します。