• ベストアンサー

エクセル:マクロ:保存時に連番をつける

3シートついたエクセルファイル(雛形)をいつも使うのですが、2シート目のみをデスクトップにある「新しいフィオルダ」に保存したいのですが、マクロで「2シートに行って移動、名前をつけて保存」という過程を記憶させたのですが、いつも同じ名前でしか保存を記憶してないため、「上書きしますか」と出てきてしまいます。自動的に連番かなにかがついて上書きしないで全部ためときたいのですがどうしたらいいでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • taseki
  • ベストアンサー率66% (155/233)
回答No.2

連番でも良いですが、桁数の心配が不要で何かと便利だと思うので、日付をファイル名にしてはどうでしょうか。 ツール→マクロ→Visual Basic Editorで、記憶させたマクロを見てください。 たぶん、自動記録の場合は、ファイル保存の部分が以下のようになっていると思います。 ActiveWorkbook.SaveAs Filename:="~デスクトップ\新しいフォルダ\Book1.xls", FileFormat~ これを、以下のように ActiveWorkbook.SaveAs Filename:="~デスクトップ\新しいフォルダ\" & Format(Date, "Long Date") & ".xls", FileFormat~ もし一日に何度も使う用なら、日付+時間でもいいですね。

rj_kanako
質問者

お礼

早急なご回答ありがとうございます! ちょっと手を加えればできそうなので、やってみます。 ありがとうございます!

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 「新しいフィオルダ」って「新しいフォルダ」のことかもしれませんが、一応、ご質問文のままにしました。 基調となるファイル名 は、 "Test" にしましたので、Test の後に、ファイルの数が連番でついていきます。これは、Sheet2 のみが保存されます。 Sub TestSample()  Dim myDeskTop As String, BaseName As String, myDir As String  Dim f As String, i As Long  myDeskTop = CreateObject("WScript.Shell").SpecialFolders(1)  BaseName = "Test" '基調となるファイル名  myDir = myDeskTop & "\新しいフィオルダ\" 'デスクトップフォルダ  f = Dir(myDir & BaseName & "*.xls")  Do While f <> ""   i = i + 1   f = Dir  Loop  Sheets("Sheet2").Copy  With ActiveWorkbook   .SaveAs myDir & BaseName & i + 1 & ".xls"   .Close False  End With End Sub

rj_kanako
質問者

お礼

早急な御回答ありがとうございます! そうです、間違えてしまってますね^^;新しいフォルダです。 早速やってみます。ありがとうございます。

回答No.1

>連番 そういう方法もありますが、端末の日付を変えることがないPCでしたら、タイムスタンプをファイル名に付加する方法もあると思いますよ。 連番管理するならば、手で抹消されたファイルも考慮し、連番管理ファイルか何かを用意しなければなりそうなので。。。 タイムスタンプでのサンプルです。 VisualBasicEditorで、雛形のThisWorkBookに以下を張ってみてください。 シート2をアクティブとかのカスタマイズは、そちらでしてください。 Option Explicit Private Const DEF_FILE_PATH As String = "C:\保存先\" ← 予め、このフォルダを作成かパスを変更してください Private Const DEF_FILE_NAME As String = "ぶっく" Private Sub Workbook_BeforeClose(Cancel As Boolean)   Dim strFineName As String   '変更が無いときは、未処理   If ThisWorkbook.Saved Then     Exit Sub   End If      '保存先を作成   strFineName = DEF_FILE_PATH & DEF_FILE_NAME & "_" & Format(Now, "yyyymmddhhnnss") & ".xls"      '名前を付けて保存   ThisWorkbook.SaveAs strFineName      '保存通知   Call MsgBox(strFineName & vbCrLf & "として、保存しました", vbInformation) End Sub

rj_kanako
質問者

お礼

早急なご回答ありがとうございます。 早速やってみます。