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」としています。

2020年9月7日追記
「myfolder = "D:\trash\"」の部分が「myfolder = "D:\trash"」となっていました。修正しました。

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

« | »

コメント

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

  2. YUI より:

    お世話になっております。
    今回私のやりたいことに完全にマッチしていたので
    完コピさせていただきました。

    私の環境では文字部分が赤くなり「コンパイルエラー 構文エラー」と出てしまいました。
    なにか設定が足りないのでしょうか。
    どうかご教示お願いいたします。

    エラー部分を下記に記入いたします。
    —————————
    newfn = myfolder _
    & Left(oldfn, pos – 1) _
    & Format(Now(), datetime) _
    & Right(oldfn, Len(oldfn) – pos + 1)

  3. stabucky より:

    >YUIさん
    確認したところ「&」とすべきところ「&」となっていました。上の記事内のコードを修正しました。
    「&」を「&」にして再度試していただけますでしょうか。
    ※「&」は文字列を連結するときに使用します。

  4. YUI より:

    無事、データの保存ができました!
    今後活用させていただきます。

    この度はありがとうございました。

  5. stabucky より:

    >YUIさん
    正しく動作したようで安心しました。

  6. Yasu より:

    はじめまして。
    上記コードを入れたのですが最後、元のファイルが開きません、VBA初心者で。
    回答宜しくお願いします。

  7. stabucky より:

    Yasuさん
    「履歴付き保存_専用フォルダ」をお使いでしょうか。
    コードに誤りがありました。
    修正しましたので再度試していただけると助かります。
    よろしくおねがいします。

  8. Yasu より:

    ありがとうございます。
    早速試してみますが上に記載されたコードを入れても元のファイルが開かないのですが?

  9. stabucky より:

    Yasuさん
    まずマクロの使い方についてはhttps://stabucky.com/wp/archives/13029を参照してください。
    次に「履歴付き保存」を使う場合で説明します。
    「履歴付き保存」のコードを例えば「履歴付き保存.xlsm」というファイルに保存します。
    これとは別に日時を付けて保存したいファイルを開きます。適当な名前で保存します。
    メニューの 表示 – マクロ – マクロ – マクロの表示 で「履歴付き保存.xlsm!履歴付き保存」を選択して実行を押します。
    これで名前付きのファイルが保存され元のファイルが開きます。

コメントを残す

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

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報