

エクセルで一定時間ごとにバックアップを保存するマクロを作りたいです。
ほかのサイトを参考に書いてみたのが、下の文です。
(※1)でバックアップファイルに保存してから、
(※2)で元のファイル名に戻すという仕組みなのですが、
これだと、「元ファイルバックアップ.xlsm」と「元ファイル.xlsm」が
両方とも15分ごとに保存されてしまいます。
試しに(※2)を削除すると、今度は15分ごとに
「元ファイルバックアップ.xlsm」「元ファイルバックアップバックアップ.xlsm」
「元ファイルバックアップバックアップバックアップ.xlsm」と、どんどんバックアップという名前が後についたファイルになってしまいます。
元ファイルの方は、自動保存せずに、作業が終わった段階で初めて保存したいです。
別名でバックアップファイルを保存しながらも、
元のファイルは保存せずに作業をし続けられるような書き換えができないでしょうか?
教えてくださると助かります。
Private Sub Workbook_Open()
MsgBox ("15分ごとに自動保存します")
Call AutoSave
End Sub
Sub AutoSave()
sFileNameHeader = GetFNameFromFStr(ThisWorkbook.FullName)
sTime = Replace(Time(), ":", "")
sSaveFileName = sFileNameHeader & "バックアップ.xlsm"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=sSaveFileName ' (※1)
ActiveWorkbook.SaveAs Filename:=(sFileNameHeader & ".xlsm") ' (※2)
Application.DisplayAlerts = True
'15分後にもう一度同じマクロを実行する設定
Call Application.OnTime(Now() + TimeValue("00:15:00"), "ThisWorkbook.AutoSave")
End Sub
Function GetFNameFromFStr(sFileName As String) As String
Dim sFileStr As String
Dim lFindPoint As Long
Dim lStrLen As Long
No.3ベストアンサー
- 回答日時:
こんにちは。
#2の回答者です。
前に勤めていた時のお話をします。私は、仕事では、Excelなどは使ってきていませんでしたが、パソコンの不得意な「おじちゃん」「おばちゃん」たちも使うことがあって、
「間違って×ボタンを押してしまっても、その日に入力データが全部消えることがないように、自動的にバックアップデータを残すようにしたいのです。」
これは、頭の痛い問題でした。
そこで、私が考えた手段は、初めと終わりのバックアップを取るというプログラムを考えました。終了時までのものと、起動時の時のものです。しかし、今のExcelのシステムでは、常にバックアップは取れるはずです。
私の考えたシステムは、最悪、昨日の終了日まで戻れるということです。もし、そうなら、#2で紹介した方法で、プログラムがある程度分かる人なら、可能なはずです。当然ですが、"SaveAs "は賛成しかねます。
私の時代の頃は、Excelなどのアプリケーションを起動するまでは、安全なファイルだったという想定の元に作られたプログラムだということです。
また、#2の世代別バックアップというのは、開発者などが使うもので、まったく話が違うと思います。私は、てっきり、そちらの話だと思いました。しかし、それとは大幅に違い、端に利用上の問題のようです。
「(なので、×ボタンを押すと消えてしまう本来のバックアップではカバーできません。また、バックアップファイルを削除する設定もできません。)」
私は、それをそのままにするとも、システムのままにするなんていう話を書いたつもりはありません。それに、保存しなくても、正常終了したものに、何か問題もあるのでしょうか?自動的にバックアップは残っています。また、正常終了した場合に、強制的に保存終了させるイベント・ドリブン型のマクロも組めるはずです。このぐらいはVBAマクロとしては、初歩的な範疇ですから、もし、お聞きなる場合は、あらためて質問を出してください。
今回の話は、ヒントだけですから、もし、#2で触れた話を考えるなら、これ以上は、ご自身で工夫、開発すればよいと思います。現行の状況を考えれば、#2の中の話で十分な情報のはずです。
それ以上は、ある程度の近い線までのプログラミングを見せられなければ、それについてはアドバイスはするつもりはありません。たぶん、そういう話は、望んでいないでしょう。また、ここら辺りに手をつけるのは、それなりのExcel以外でのシェル・プログラミングの経験と自信のある部類の人たちのものですから、そうでなかったら、この辺りの開発は、あまりお勧めするものではありません。
二度にわたる返信ありがとうございます。実際のケースを想像してみましたが、ご指摘の通り、強制保存やバックアップからの復元でカバー可能な範囲かな、と思いました。
様々な視点からのアドバイスありがとうございました!
No.2
- 回答日時:
私自身、昔は、この辺りは研究してみたことがあります。
ただ、それは、Excel2000時代の話であって、当時、自動保存は調子が良くなかったことが理由です。Excel 2007以降では、かなり、この自動バックアップの性能は良くなっていると思うのです。ところで、お使いのバージョンはいくつですか?それによっても話が大幅に変わるような気がします。
>元ファイルの方は、自動保存せずに、作業が終わった段階で初めて保存したいです。
>別名でバックアップファイルを保存しながらも、
>元のファイルは保存せずに作業をし続けられるような書き換えができないでしょうか?
掲示板で出されたコードと、実際のご要望とはかなり違っているようですが、要するに、ご希望になっているのは、Excelで、「世代別バックアップ」をしたいということではありませんか?
私自身は、Office 全体を通してマクロ中心ですから、マクロコードの自動保存というツールも、Microsoft のVSS(Visual SourceSafe)というのも使ったことがあるのですが、どうしようもないゴミ・コードも収録するので、やめてしまいました。専ら、テキストエディタにコピーするという、極めて初歩的な方法ですし、それを検索するには、GrepWin という極めてすぐれものツール(日本語非対応ですが、直してしまいました)を使って、正規表現でファイルを探すという、なんとも奇妙な方法に落ち着いています。
しかし、そうしたアプリを使わずとも、Excel自身の機能を使えば、可能なはずです。(申し訳ないのですが、正直なところ、私は、今のところ、それをマクロにしてまで、手をつける気持ちがありません。調べる手段に、結構細かい作業になるからですが。)
C:\Users\[YourName]\AppData\Roaming\Microsoft\Excel\ [添付画像を付けました(ファイル名透けて見えてしまいます。今年の1月の「教えて!goo」の改変以降、新しい方法を少しずつ開発中です。)]私は、Excel2010 ですが、上記の自動保存フォルダーに、バックアップファイルが、xlsb (バイナリー)ファイルとして残っています。それを利用すればよいとは思います。これは、不要になれば、消えてしまいます。
ただし、それ自体は、Office のシステムの問題ですので、ことさら、現在は手を付けたことがありません。これを利用すればよいと思っています。そのファイルを外部オブジェクト(つまり、File System Object)で、コピー兼リネームにして、適当の場所に保存すればよいのではないかと思います。Excelの内部コマンドは、この場合は使わないほうがよいです。
ActiveWorkbook.SaveAs
とすれば、保存ファイルは実体化してしまいますから、元のファイルは保存していると同じことです。
こんな場合は、クラス・インスタンスで、「上書きモドキ」を作ってやればいいでしょうね。上書きをしているようで、別名で保存してしまうという方法です。こんな面倒なものとは思いませんでしたので、成功はしていません。
>ActiveWorkbook.SaveAs Filename:=sSaveFileName ' (※1)
>ActiveWorkbook.SaveAs Filename:=(sFileNameHeader & ".xlsm") ' (※2)
>ほかのサイトを参考に書いてみたのが、下の文です。
>(※1)でバックアップファイルに保存してから、
>(※2)で元のファイル名に戻すという仕組みなのですが、
そのコードは、古い書き方で、昔はそれで良かったけれども、今は、ミスすることが多いです。
これらの問題は、特にマクロのテクニックだけのことです。元ファイルのベース名を確保して、それをループしてポストフィックスやプレフィックスをつければ済みます。
http://vba-geek.jp/blog-entry-304.html
これは、私の「上書きモドキ」と同じようなものだと思います。ただし、私の考えた「上書きモドキ」とは作り方が違います。ですが、このコード見て、このマクロの本質的な欠陥を見抜けないようなら、こうしたマクロには手を出さないほうが良いかもしれませんね。(むろん、やったことがある人に限るかもしれませんが(^^;)
私は、ここらあたりは、もう一度は調べてもよいとは思うのですが、「世代別バックアップ」することを目的としたアプリもあるようですから、もし本当に困れば、そこに逃げる手もあるのです。
http://freesoft-100.com/pasokon/backup.html
とりとめもなく書いて、すみません。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/11 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/10/03 09:55
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
このQ&Aを見た人はこんなQ&Aも見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
人生でいちばんスベッた瞬間
誰しも、笑いをとろうとして失敗した経験があると思います。
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
エクセルでVBAを使用して1分毎にファイルを保存するプログラムを書きた
Excel(エクセル)
-
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PDFを1ページ目から表示させた...
-
CSVファイルで誤って上書き保存...
-
Illustratorでファイルを上書き...
-
Excelでファイル開いただけで更...
-
Thunderbirdで受信したメールを...
-
Word差し込み後にセクション別...
-
EXCEL のファイルをRTFフ...
-
Googleドキュメントのpdf文書に...
-
ファイルの更新日時が変わらない。
-
Wordの容量が繰り返し保存する...
-
EXCEL2010で名前を付けて保存の...
-
.rtfファイルをWordで編集した...
-
Excel2016タスクバーの順番につ...
-
パソコンに詳しい方教えてください
-
ツイッターのダイレクトメッセ...
-
テキストボックスに直接入力が...
-
蔵衛門のアルバムデータはどこ...
-
OpenOffice calcで作成したファ...
-
windows photoで作成途中のファ...
-
unix実行ファイルをmacで見るに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PDFを1ページ目から表示させた...
-
CSVファイルで誤って上書き保存...
-
Illustratorでファイルを上書き...
-
Wordの容量が繰り返し保存する...
-
Thunderbirdで受信したメールを...
-
OpenOffice calcで作成したファ...
-
Word差し込み後にセクション別...
-
Excelでファイル開いただけで更...
-
WORDで文章を保存すると~t...
-
ファイルの更新日時が変わらない。
-
Wordの更新日時が勝手に変更される
-
EXCEL のファイルをRTFフ...
-
アフターエフェクトのAMEファイ...
-
EXCEL2010で名前を付けて保存の...
-
Googleドキュメントのpdf文書に...
-
テキストボックスに直接入力が...
-
ツイッターのダイレクトメッセ...
-
.rtfファイルをWordで編集した...
-
保存を速く完了するにはどうす...
-
パソコンに詳しい方教えてください
おすすめ情報
補足します。使っているのはエクセル2013、ついでにOSはWindows8.1です。
エクセル本来のバックアップ機能とは別になんでわざわざマクロを使ってまでバックファイルを作りたいかといいますと、そのエクセルはパソコンがあまり得意でない人にも操作してもらうからです。
間違って×ボタンを押してしまっても、その日に入力データが全部消えることがないように、自動的にバックアップデータを残すようにしたいのです。
(なので、×ボタンを押すと消えてしまう本来のバックアップではカバーできません。
また、バックアップファイルを削除する設定もできません。)