エクセルVBA 日付つきバックアップファイル

このQ&Aのポイント
  • エクセルVBAを使用して日付つきのバックアップファイルを作成する方法について教えてください。
  • バックアップファイルに保存時刻とオリジナルのフルパスを記載する方法についてわかりません。
  • マクロ実行後も作業中のブックをアクティブにしたままにする方法について教えてください。
回答を見る
  • ベストアンサー

エクセルVBA 日付つきバックアップファイル

下記のような連番でバックアップファイルを作成するマクロを書きました。バックアップファイルの最上部に行を挿入し、そこにバックアップファイルの作成日とオリジナルのFullName(フルパス)を記したいのですがうまくいきません。 .Range("a1") = "保存時刻 : " & Format(Now, "yyyy年mm月dd日hh時nn分") .Range("a2") = "オリジナル : " & ActiveWorkbook.FullName ↑のような感じの情報を加えたいのです。 どなたか、下記のマクロにフルパスと作成日を付与し、マクロ実行後も作業中のブックをアクティブのままにして置く方法をおしえてください。 Sub MySave2() Dim FSO As New Scripting.FileSystemObject バックアップファイル名 = "C:\My Documents\エクセルBackUps\" & Format(Date, "yyyymmdd") _ & ActiveWorkbook.Name If FSO.FileExists(バックアップファイル名) = False Then ActiveWorkbook.SaveCopyAs バックアップファイル名 Else Dim indn As Variant For indn = 2 To 1000 新 = "C:\My Documents\エクセルBackUps\" & Format(Date, "yyyymmdd") _ & "-" & indn & ActiveWorkbook.Name If FSO.FileExists(新) = False Then ActiveWorkbook.SaveCopyAs 新 Exit For Else End If Next indn End If End Sub

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

何をしたいか良く掴めませんでしたが、以下のような事で良いのでしょうか? Sub MySave2() Dim pObjFSO As Object Dim pStrOriginPath As String Dim pStrNewPath As String Dim pLngINDN As Long Set pObjFSO = CreateObject("Scripting.FileSystemObject") pStrOriginPath = "C:\Documents and Settings\Administrator\デスクトップ\" & _ Format(Date, "yyyymmdd") & ActiveWorkbook.Name If pObjFSO.FileExists(pStrOriginPath) = False Then ActiveWorkbook.SaveCopyAs pStrOriginPath Else pLngINDN = 2 Application.ScreenUpdating = False Do While (True) pStrNewPath = "C:\Documents and Settings\Administrator\デスクトップ\" & _ Format(Date, "yyyymmdd") & "-" & pLngINDN & ActiveWorkbook.Name If pObjFSO.FileExists(pStrNewPath) = False Then Range("A1").Value = "保存時刻:" & Format(Now, "yyyy年mm月dd日hh時nn分") Range("A2") = "オリジナル : " & ActiveWorkbook.FullName ActiveWorkbook.SaveCopyAs pStrNewPath Exit Do End If pLngINDN = pLngINDN + 1 Loop Range("A1").Value = "" Range("A2") = "" Application.ScreenUpdating = True End If End Sub

関連するQ&A

  • 開いているブックをバックアップ後閉じる方法

    開いているマクロブックのバックアップを実行すると、開いているマクロブックは閉じられ、バックアップファイルが作成されるまではいいのですが、バックアップファイルが開いたままになります。 出来ればバックアップファイルも閉じるようにしたいのですが、何を追記すればよいでしょうか? Sub バックアップ() Dim rc As Long rc = MsgBox("バックアップしますか?", vbYesNo + vbQuestion, "確認") If rc = vbYes Then Application.DisplayAlerts = False ActiveWorkbook.SaveAs "C:\excel\" & Format(Date, "yyyymmdd") & ".xlsm" Application.DisplayAlerts = True End If End Sub

  • エクセルで現状を逐一バックアップできるようにしたいと思っているのですが

    エクセルで現状を逐一バックアップできるようにしたいと思っているのですがうまくいきません。 下記のようにバックアップファイル作成用のVBAを作ってみたのですが、できあがるファイルが「FALSE」という名前の拡張子のないファイルとして出てきてしまいます。 どこがいけないのでしょうか?(XLSファイルをEXCEL2007で作業しています。) Sub バックアップファイル作成() Dim buf As String buf = buf & ActiveWorkbook.Path & vbCrLf ActiveWorkbook.SaveCopyAs failname = buf & "Backup.xls" End Sub また、できればファイル名が[Backup2010/2/22]のように、日付も書き込まれてもらえると助かるのですが、どうすればいいのでしょうか。

  • エクセルマクロで

    エクセルマクロでファイルの有無を確認したくて 次のようなマクロを作りました。 Dim fso Const Folder = "D:\AAA" Const File = "*****.xlsx" Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(Folder & "\" & File) = False Then MsgBox "ファイルは存在しません" ファイル名の*****部分に Range("A1").Valueを使いたいのですがうまくいきません。 どのようになるのでしょうか。よろしくお願いします。

  • エクセル VBA マクロを動かしたときに元々開いているファイルを閉じる・・・

    いつも皆様には大変お世話になっております。 早速質問ですが、 「もしこのマクロが動く時点で他のExcelファイルが開いていたら、警告の上 自ファイルを閉じる、開いていなければ~実行」 という処理をかませたいと思っております。 ここの判定の方法がわかりません。(既にExcelが起動されていたら、でもいいのでしょうか。。。?) 下記のようなマクロを組んでいるので 他のファイルが開いていると厳しい状況です。 bname = "C:\" & Format(Range("q1").Value, "yyyymmdd") & "サンプル" & ".xls" ActiveWorkbook.SaveAs bname Workbooks.Open "C:\サンプル.xls" Workbooks(1).Close 本当は"yyyymmdd"&"サンプル"&".xls"ファイルだけ閉じられればいいのですが、自分の知識では上記のような形でしか動かせません;; もしご存知の方、ご教示ください。よろしくお願いします

  • Excel VBAでのSaveCopyAsの挙動

    Excel 2016/2019を使っています。よろしくお願いします。 ブックに変更があった場合にバックアップを保存したいので、 上書きにならないように日付と連番をつけてバックアップ専用フォルダにSaveCopyAsを使って保存しようとしています。 明示的に「保存」アイコンをクリックすると期待通りの動作が行われます。しかし、保存せずに「x」印をクリックして閉じてしまった場合でも、変更があるならバックアップファイルを作りたいのですが、SaveCopyAsを通っているのにバックアップファイルが作成されません。 記載したコードは以下のとおりです。 ThisWorkbookオブジェクトに対して、 Public Sub Workbook_beforeClose(Cancel As Boolean) '変更があれば(ThisWorkBookを)保存 If ThisWorkBook.Saved = False Then ThisWorkBook.Save End If End Sub 'ThisWorkBookの保存時にバックアップを作成 Private Sub Workbook_BeforeSave(省略) If ThisWorkbook.Saved = False Then 'バックアップファイルのフルパスを作成  ThisWorkbook.SaveCopyAs "バックアップファイルフルパス" End Sub 何かヒントをお持ちの方みえられましたらご教示いただければ幸いです。

  • 「VBA} XLSMのファイルをXLSX保存したい

    いろいろとVBAが入っているシート1.xlsmがあります。 シート1の内容をXLSXで保存したいのですが、うまくいきません。 解決に向けてご教授ください。 <ステップ1 XLSMでは保存できます。> Private Sub hachu_Click() '担当者名取得(C4) Dim s As String s = Range("C4").Value Debug.Print (s) ActiveWorkbook.SaveCopyAs Filename:= _ "c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsm" '1013_161712木村.XLSM End Sub <ステップ2 XLSXで保存できますが、ファイルを開くときにエラーが出ます。>  FIG.1 Private Sub hachu_Click() '担当者名取得(C4) Dim s As String s = Range("C4").Value Debug.Print (s) ActiveWorkbook.SaveCopyAs Filename:= _ "c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsm" '1013_161712木村.XLSM End Sub <ステップ3 マクロのないシート2にあたい張り付けして、シート2だけ保存> 保存の際にFIG.2の様なアラートが出て、手作業が必要です。> 'シートの複製(複製すると新しいブックが立ち上がります) Worksheets(2).Copy '名前を付け、ファイル形式も決めて特定の場所に保存する。 ActiveWorkbook.SaveAs _ Filename:="c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsx", _ FileFormat:=xlOpenXMLWorkbook

  • VBA/エクセルの日付入力でYYYYMMDD

    エクセル2013です。 特定のセルに日付を入力してもらうのですが、人によりさまざまな入力をされてしまいます。 どんな入力でも日付であれば、シリアル値なのであとからなんとかなるのですが、困るのはYYYYMMDDの連続数字、例えば今日なら20140712と入力されてしまうことです。 入力規則で排除したいのですが、それは許されず、20140712も日付として扱わなければならなくなりそうです。 そこでマクロで対処しようと以下のコードを書きました。 Private Sub Worksheet_Change(ByVal Target As Range)   Select Case Target.Address(0, 0)     Case "D2", "F2", "C4"       If Target.Value = "" Then Exit Sub       If IsDate(Target.Value) Then         Target.NumberFormatLocal = "yyyy/m/d"       Else         Application.EnableEvents = False         Target.Value = CDate(Format(Target.Value, "@@@@/@@/@@"))         Application.EnableEvents = True       End If     Case Else       Exit Sub   End Select End Sub これで最初はうまくいき、20140712と入力されても、ちゃんと2014/7/12になります。 ところが、同じセルに再度YYYYMMDD数字形式で入力すると、実行時エラー「オーバーフローしました」になってしまいます。多分セルが、YYYYMMDDの数字をシリアル値として見てありえない日付と判断したのだと思います。 どのようにコードを修正したらよろしいでしょうか? もう1点、日付をYYYYMMDDの連続数字で入力することは普通、エクセルではあまり見たことないですが、これって一般的な方法なのでしょうか?

  • エクセルVBAで住所録からテキストファイルを作成

    住所録を分類(大中小の3つ)して、それぞれの名前でファイルを作成しています。 旧)中分類のファイル名で「chu」フォルダ内にHTMLファイルを作成   小分類のファイル名で「sho」フォルダ内にHTMLファイルを作成 これを以下のように改変したいと思っております。 新)大分類の名前のフォルダを作成して、   そのフォルダの中に該当する分だけの「中分類のファイル」を作成   同じフォルダの中に該当する分だけの「小分類のファイル」を作成 当方まったくの初心者なので、手も足も出ませんでした。 どうかご教授よろしくお願いいたします。 Sub 中分類HTMLソース() Dim fso As Object 'ファイルシステムオブジェクト Dim strPath As String '削除対象ファイル Set fso = CreateObject("Scripting.FileSystemObject") strPath = Environ("USERPROFILE") & "\Desktop\chu\*.*" fso.DeleteFile strPath, True Set fso = Nothing 'ファイルの削除(読み取り専用の場合も削除) Dim myPath As String Dim i As Long myPath = Environ("USERPROFILE") & "\Desktop\chu\" Range("A:I").Sort Key1:=Range("H2"), Header:=xlYes, MatchCase:=False, _ Orientation:=xlTopToBottom For i = 2 To Range("H1").End(xlDown).Row If Range("H" & i).Text <> Range("H" & i - 1).Text Then Open myPath & Range("H" & i).Text & ".html" For Output As #1 Print #1, "<!DOCTYPE html>" & vbNewLine _ & "<html lang=""en"">" & vbNewLine _ & "<body>" & vbNewLine _ & "<div class=""span3"" id=""sidebar"">" & vbNewLine End If Print #1, "<div class=""widget"">" & vbNewLine _ & "<h4 class=""widgetTitle"">" & Range("A" & i).Text & "</h4>" & vbNewLine _ & "<ul><li>" & Range("B" & i).Text & "</li>" & vbNewLine _ & "<li><a href=""/sho/" & Range("I" & i).Text & ".html"">連絡先・地図はこちら</a></li></ul></div>" & vbNewLine If Range("H" & i).Text <> Range("H" & i + 1).Text Then Print #1, "</div>" & vbNewLine & "</body>" & vbNewLine & "</html>" Close #1 End If Next End Sub Sub 小分類HTMLソース() Dim fso As Object 'ファイルシステムオブジェクト Dim strPath As String '削除対象ファイル Set fso = CreateObject("Scripting.FileSystemObject") strPath = Environ("USERPROFILE") & "\Desktop\sho\*.*" fso.DeleteFile strPath, True Set fso = Nothing 'ファイルの削除(読み取り専用の場合も削除) Dim myPath As String Dim i As Long myPath = Environ("USERPROFILE") & "\Desktop\sho\" Range("A:I").Sort Key1:=Range("I2"), Header:=xlYes, MatchCase:=False, _ Orientation:=xlTopToBottom For i = 2 To Range("I1").End(xlDown).Row If Range("I" & i).Text <> Range("I" & i - 1).Text Then Open myPath & Range("I" & i).Text & ".html" For Output As #1 Print #1, "<!DOCTYPE html>" & vbNewLine _ & "<html lang=""en"">" & vbNewLine _ & "<body>" & vbNewLine _ & "<div class=""span3"" id=""sidebar"">" & vbNewLine End If Print #1, "<div class=""widget"">" & vbNewLine _ & "<h4 class=""widgetTitle"">" & Range("A" & i).Text & "</h4>" & vbNewLine _ & "<ul><li>" & Range("B" & i).Text & "</li>" & vbNewLine _ & "<li>" & Range("C" & i).Text & "</li>" & vbNewLine _ & "<li>" & Range("D" & i).Text & "</li>" & vbNewLine _ & "<li>" & Range("E" & i).Text & "</li></ul></div>" & vbNewLine If Range("I" & i).Text <> Range("I" & i + 1).Text Then Print #1, "</div>" & vbNewLine & "</body>" & vbNewLine & "</html>" Close #1 End If Next End Sub

  • OSがVistaのエクセル2007で作ったファイルがXpのエクセル2003で読み取れない

    すいません。教えてください。 Vista PCエクセル2007で保存したファイルが、XP PCエクセル2003で見ると文字化けしてしまうのですが、どこがいけないのか教えてください。 Sub 保存シートの名前を付けて保存() ' シート保存 Macro '***このマクロは見積もり番号と件名を保存ファイル名にし保存します。*** Dim Answer3 Dim 既定ファイル名 As String Dim 保存ファイル名 As Variant Answer3 = MsgBox("本当に保存しますか?", vbYesNo) If Answer3 = vbNo Then MsgBox ("キャンセルしました。") Exit Sub End If Sheets("保存シート").Select Application.CutCopyMode = False Sheets("保存シート").Copy 既定ファイル名 = Range("V7") 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名, "Excel 97-2003ブック, *.xls") If 保存ファイル名 = False Then MsgBox "保存は中止されました。" ActiveWorkbook.Close (False) Else ActiveWorkbook.SaveCopyAs 保存ファイル名 ActiveWorkbook.Close (False) End If End Sub よろしくお願いします。

  • エクセルマクロ(vba)のFSO.OpenTextFileを利用したファイルへの追記について

    FSOを利用して、特定のファイルがなければ、FSO.CreateTextFileを使ってファイルを作成して、ログを記入します。 特定のファイルがあれば、FSO.OpenTextFileを使って追記します。 ファイルが存在しないので新規でファイル作成を行ってからログを記入するのははうまくいくのですが、ファイルが存在するので、ファイルを開いて追記する場合ががうまくできません。 何が原因なのでしょうか? 以下がそのプログラムです。 アドバイスをよろしくお願いします。 Dim excel_folder excel_folder = ThisWorkbook.Path excel_folder = excel_folder & "\log.txt" Set objShell = CreateObject("Wscript.Shell") Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") Dim stream, data_text If FSO.fileexists(excel_folder) Then Set stream = FSO.OpenTextFile(Filename:=excel_folder, IOMode:=ForAppending, Create:=True) Else: Set stream = FSO.CreateTextFile(Filename:=excel_folder, Overwrite:=True) End If data_text = "test" stream.writeLine (data_text) stream.writeLine (vbCrLf) stream.Close

専門家に質問してみよう