• ベストアンサー

エクセルVBAで、元になるファイルをコピーし、ファイル名を連続した日付

エクセルVBAで、元になるファイルをコピーし、ファイル名を連続した日付としたいのですが、 ボタン一つで、ファイル名を、2010.1.1請求書.xls~2010.1.31請求書.xlsとして、 2010.1.1請求書のシート1のA1セルに、その日付2010.1.1を入力保存し、ファイルを連続作成する コードはどのようになるのでしょうか?  VBA初心者です。ご教授お願いします。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

(1) 別の件ですが、kmetuさんのSub test()のコードで、Dim i As Integerがいらない理由をおしえてください VBEのオプションの編集で「変数の宣言を強制する」というチェックが既定では外れているのでDimがなくても正常に動きますが、Dimは書いたほうがいいですね。私の手抜きでした。 (2) 元となるファイルをコピーして・・・・自分なりに書きました。エラーはありませんが少々時間がかかります。時間を短縮させるためにはどのようにしたらよろしいでしょうか? ファイルをコピーしてそのファイルを開き作業をすると言うことを続けていますが、私なら実際に手作業でするとしても、原紙.xlsを開いてそのまま作業をして、名前をつけて保存で別の名前で保存して必要回数作業を進めていきます。 流れとしては Workbooks.Open "D:\Work\原紙.xls" For i = 1 To 3 Worksheets("1").Range("b3").Value = "2010/1/" & i Worksheets("2").Range("b3").Value = "2010/1/" & i Worksheets("3").Range("b3").Value = "2010/1/" & i ActiveWorkbook.Save Filename:="D:\Work\ttt\2011.1." & i & "請求書.xls" Next i ファイルを開くのが一回になり、ファイルのコピーと言う作業もなくなりますので時間短縮になるのではないでしょうか。作業後名前をつけて別名で保存をしているので、もとの原紙.xlsは変更されません。

wish_2010
質問者

お礼

kmetuさん、ありがとうございます。 <ファイルをコピーしてそのファイルを開き作業をすると言うことを続けていますが、私なら実際に手作業でするとしても、原紙.xlsを開いてそのまま作業をして、名前をつけて保存で別の名前で保存して必要回数作業を進めていきます。> まだまだ私の考えがあまいようです。 しっかり勉強したいと思います。

その他の回答 (2)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

2007を利用していないので良くわかりませんが > 上記のコードを実行したところ、次の機能はマクロなしのブックには保存できません。 次の機能とは何をさしているのでしょうか? マクロありで保存されていいのでしたら Sheets.Copy を外してください。

wish_2010
質問者

お礼

kmetuさん、すみません。ありがとうございます。 Sheets.Copyを外すことで、エラーはなくなりました。 もう少し、Sheets.Copyについて、勉強したいと思います。 また、質問させて頂きます。

wish_2010
質問者

補足

おはようございます。 <次の機能とは何をさしているのでしょうか? VBプロジェクトのことでしょうか? Sheets.Copyについては、なんとなくですが、分かったように思います。 別の件で質問させて頂きます。 (1) 別の件ですが、kmetuさんのSub test()のコードで、Dim i As Integerがいらない理由をおしえてください。 (2) 元となるファイルをコピーして・・・・自分なりに書きました。エラーはありませんが少々時間がかかります。時間を短縮させるためにはどのようにしたらよろしいでしょうか? コードは以下の通りです。 Sub TEST123() Dim i As Integer Excel.Application.Visible = False For i = 1 To 3 FileCopy "D:\Work\原紙.xls", "D:\Work\ttt\2011.1." & i & "請求書.xls" Workbooks.Open "D:\Work\ttt\2011.1." & i & "請求書.xls" Worksheets("1").Range("b3").Value = "2010/1/" & i Worksheets("2").Range("b3").Value = "2010/1/" & i Worksheets("3").Range("b3").Value = "2010/1/" & i ActiveWorkbook.Save Next i MsgBox "処理終了しました" Workbooks.Close Excel.Application.Visible = True End Sub よろしくお願い致します。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

標準モジュールに Sub test() For i = 1 To 31 Sheets.Copy ActiveSheet.Range("A1").Value = "2010/1/" & i ChDir "D:\" '←保存したいフォルダを指定してください ActiveWorkbook.SaveAs Filename:="2010.1." & i & "請求書.xls" Next End Sub として実行してください

wish_2010
質問者

お礼

kmetuさん、ありがとうございます。 現在エクセルのバージョンは2007を使用いています。 上記のコードを実行したところ、次の機能はマクロなしのブックには保存できません。 と表示されます。そこで、「はい」を押すとマクロなしで保存され、「いいえ」を押すと、 実行時エラー:マクロなしのブックには、VBプロジェクトやXLMシートを保存できませんと表示されます。解決策はどのようにしたら、よろしいでしょうか?    また、元となるファイルをコピーし、同じ手順でファイルを作るには、どのようにしたらよろしいでしょうか? お世話になります。よろしくお願いします。  

関連するQ&A