Excelのファイル名に日時を付けて保存するマクロ
Excelで作業しているとき、大きな間違いに気付いて以前の内容に戻したいことがありますが、上書き保存してしまっていて戻せないケースがあります。
そこである程度、作業したらファイル名を変えて保存するという方法があります。
エクセルで「上書き保存」は事故のもと。では、どうするか?|外資系投資銀行のエクセル仕事術 ウェブ版|ダイヤモンド・オンライン
ここで紹介されているのは、ファイル名の後ろに日付と番号を付けて保存しておく方法。
これが実行できれば確実ですが、手動で入力して保存するのは結構、面倒です。
そこでマクロを作ってみました。
日付を取得するのは簡単ですが、連番を付けるのは面倒なので、時分秒をセットすることにします。
マクロを実行するとまず作業中のファイルが上書き保存されます。
さらに作業中のファイル名が「abcde.xlsx」ならば「abcde_20150316_123520.xlsx」のようにファイル名に日時を付加して別名で保存されます。
保存したらこれを閉じて、元の「abcde.xlsx」が開きます。作業を続けます。
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です。拡張子の前に日時を挿入しています。
上のコードの場合、元のファイルと同じフォルダに履歴付きファイルが保存されます。
履歴付きファイルを専用のフォルダにフォルダにまとめて保存する場合には次のようにします。
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 | タグ: VBA ]
« 実際に「100通りの表情」を描いてみた | 豚の角煮 »
コメント
-
お世話になっております。
今回私のやりたいことに完全にマッチしていたので
完コピさせていただきました。私の環境では文字部分が赤くなり「コンパイルエラー 構文エラー」と出てしまいました。
なにか設定が足りないのでしょうか。
どうかご教示お願いいたします。エラー部分を下記に記入いたします。
—————————
newfn = myfolder _
& Left(oldfn, pos – 1) _
& Format(Now(), datetime) _
& Right(oldfn, Len(oldfn) – pos + 1) -
無事、データの保存ができました!
今後活用させていただきます。この度はありがとうございました。
-
はじめまして。
上記コードを入れたのですが最後、元のファイルが開きません、VBA初心者で。
回答宜しくお願いします。 -
ありがとうございます。
早速試してみますが上に記載されたコードを入れても元のファイルが開かないのですが? -
使わせていただきました。
ありがとうございます! -
大変ありがたいマクロ公開いただきありがとうございました。
このマクロを入れたExcelファイルをオンラインのSharePoint上に置いてあります。
保存するときSharePoint上の別フォルダに保存したいと思っています。
myfolder = “D:\trash\”の””の間にSharePointのロケーションURLを入れたのですが、エラーになります。
良い方法をご存じであれば教えていただけますと幸いです。 -
コメント失礼します。
Sub 履歴付き保存() でファイル名を「指定のセルの値_yyyymmdd_hhmmss」としたいのですが、可能でしょうか?
可能な場合、コードを教えていただけると助かります。
お手数をおかけしますが宜しくお願い致します。 -
ご確認ありがとうございます。
ファイル名を変更して保存することが出来ました。
ただ元のファイルに別名で保存されなくなってしまったのですが、原因は分かりますか?
原本の名前が変わるようになっています。 -
ご確認ありがとうございました。
非常に助かりました。
[…] 以前、Excelのファイル名に日時を付けて保存するマクロを紹介しました。 ファイルを上書き保存する際に別途、日時を付けたファイルを保存することで「うっかり上書き」を防ぎます。 今回はこれのWord版を作りました。 […]