Excelのファイル名に日時を付けて保存するマクロ

Pocket

Excelで作業しているとき、大きな間違いに気付いて以前の内容に戻したいことがありますが、上書き保存してしまっていて戻せないケースがあります。
そこである程度、作業したらファイル名を変えて保存するという方法があります。

エクセルで「上書き保存」は事故のもと。では、どうするか?|外資系投資銀行のエクセル仕事術 ウェブ版|ダイヤモンド・オンライン

ここで紹介されているのは、ファイル名の後ろに日付と番号を付けて保存しておく方法。
これが実行できれば確実ですが、手動で入力して保存するのは結構、面倒です。

そこでマクロを作ってみました。
日付を取得するのは簡単ですが、連番を付けるのは面倒なので、時分秒をセットすることにします。
マクロを実行するとまず作業中のファイルが上書き保存されます。
さらに作業中のファイル名が「abcde.xlsx」ならば「abcde_20150316_123520.xlsx」のようにファイル名に日時を付加して別名で保存されます。
保存したらこれを閉じて、元の「abcde.xlsx」が開きます。作業を続けます。

Sub 履歴付き保存()
    Const datetime = "_yyyymmdd_hhmmss"
    Dim oldfn, newfn, pos
    ActiveWorkbook.Save
    oldfn = ActiveWorkbook.FullName
    pos = InStrRev(oldfn, ".")
    newfn = Left(oldfn, pos - 1) _
        & Format(Now(), datetime) _
        & Right(oldfn, Len(oldfn) - pos + 1)
    ActiveWorkbook.SaveAs Filename:=newfn
    ActiveWindow.Close
    Workbooks.Open Filename:=oldfn
End Sub

「datetime = "_yyyymmdd_hhmmss"」で日時の形式を指定します。この場合、「_年月日_時分秒」となります。保存頻度が1時間に1度ならば「datetime = "_yyyymmdd_hh"」でもいいかもしれません。
InStrRevは文字列の右から目的の文字を探す関数です。ここでは拡張子を調べるために右から「.」の位置を取得しています。つまり拡張子は「.xlsx」でも「.xls」でもOKです。拡張子の前に日時を挿入しています。

上のコードの場合、元のファイルと同じフォルダに履歴付きファイルが保存されます。
履歴付きファイルを専用のフォルダにフォルダにまとめて保存する場合には次のようにします。

Sub 履歴付き保存_専用フォルダ()
    Const datetime = "_yyyymmdd_hhmmss"
    Const myfolder = "D:\trash"
    Dim oldfn, newfn, pos
    ActiveWorkbook.Save
    oldfn = ActiveWorkbook.Name
    pos = InStrRev(oldfn, ".")
    newfn = myfolder _
        & Left(oldfn, pos - 1) _
        & Format(Now(), datetime) _
        & Right(oldfn, Len(oldfn) - pos + 1)
    ActiveWorkbook.SaveAs Filename:=newfn
    ActiveWindow.Close
    Workbooks.Open Filename:=oldfn
End Sub

「myfolder = "D:\trash\"」の箇所で専用フォルダを指定します。「どうせ使わなければ捨てる」という意味でフォルダ名を「trash」としています。

関連記事

[ 2015年3月16日 | カテゴリー: Excel | タグ: ]

« | »

コメント

  1. […] 以前、Excelのファイル名に日時を付けて保存するマクロを紹介しました。 ファイルを上書き保存する際に別途、日時を付けたファイルを保存することで「うっかり上書き」を防ぎます。 今回はこれのWord版を作りました。 […]

コメントを残す

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

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報