• ベストアンサー

エクセル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

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • EXCEL VBAで別ファイル作成

    エクセル97です。 エクセルファイル AAA.xls のすべてのワークシートのうち、セルA1に TRUE がはいっているもの、(枚数はそのときにより不定です。)のみをコピーして、別のエクセルファイルを作成したいのです。 その際、新しいファイルに貼り付けるのは書式と値のみで、シート名は 元ファイルのシート名と同じにしたいのです。 どのようなVBAを書けばよいかご教示ください。 (AAA.xls にはワークシート以外にグラフシートやダイアローグシートが入っています。)

  • EXCEL VBAでファイル名を変更してコピー

    決められたフォルダーの中にある決められた名称のファイル(仮にc\document\aaa.xls)を、決められたフォルダーにコピー元のファイル名+毎回指定した数字を付加したファイル名(仮に\document\aaa9999.xls)としてコピーする方法をエクセルのVBAで実現する方法を教えてください。指定する数字の9999はプログラム起動後にダイアログBOXで指定できればベストですが、難しければ指定のセルに毎回入力でもかまいません。

  • 名を付けて保存のコード(エクセルVBA)

    セルA1に書いてある文字をそのままファイル名にして保存させるコードの記述方法を教えて下さい。 例) A1に 「’001」を入力しておき、シート上に配置してあるコマンドボタンをクリックすることで、「001.xls」と名を付けて、あらかじめ決めてある、ディレクトリに保存 エクセル97を使用しています。上書き保存とか、予めコード内にファイル名を書いておく方法は分かったのですが、セルを参照させる方法が分かりません! どなたか詳しい方、宜しくお願い致します。

  • VBAでファイル名を変更したい

    EXCEL2003のVBAでブックを連続して保存をするものを作成したのですが、スキルが足りないため、ファイル名が数字になってしまい、リネームをしたいのですが、出だしからつまずいております。 リネームをしたいブック(ファイル)は一つのフォルダに入っており、 excelのシートには旧ファイル名と新ファイル名の一覧をつくり VBAを実行すると一覧に載っているブック名が変更される というものを作りたいのですが、可能でしょうか。 一覧は 旧ファイル名  新ファイル名 1.xls      1北海道.xls 2.xls      2青森.xls という感じです。 フリーのリネームソフトではなく何とか自力でやりたいと思っております。 お力をお貸しください。 よろしくお願いいたします。

  • EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

    VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか? どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。 シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

  • エクセルのリンク元ファイル名のバグ

    エクセルのリンク元ファイル名のバグ エクセルのバグと思われる現象に遭遇しました。 ファイルが破損して、開けなくなる致命的なバグなんですが、 Webで検索しても関連する情報が見付からなかったので、 質問させて頂きます。 確認した環境  OS   : Windows 2000, Windows XP  Excel : Office 2000, Office 2003 不具合の概要  他のファイルへのリンクがあり、リンク元のファイル名に  カギ括弧が含まれていると、バグる。  保存して、開き直す度に、ファイル名にゴミデータが付加され、  繰り返すうちに、ファイルが破損し、開けなくなる。 不具合の再現方法 1.新規のBook(リンク元.xlsとします)を作り、適当にグラフを作成する。 2.一旦保存して終了。エクスプローラ上でファイル名にカギ括弧を付ける。   リンク元[1].xls にしたとします。 3.再度、リンク元[1].xls を開き、グラフをコピー。 4.別の新規Book(不具合.xlsとします)を作り、グラフを貼り付ける。 5.これで、不具合.xlsには、「ほかのファイルへのリンク」ができ、   リンク元のファイル名にカギ括弧が含まれている状態になります。   グラフのデータ要素をクリックすることでリンク元を確認できます。      保存前の状態   =SERIES(,'[リンク元(1).xls]Sheet1'!$B$7:$B$10,'[リンク元(1).xls]Sheet1'!$C$7:$C$10,1) 6.不具合.xlsを保存、終了、開くを繰り返すと、リンク元のファイル名にゴミが付加される。   最初の保存後のファイル名部分   'C:\TEMP\[リンク元[1].xls]Sheet1'   2回目の保存後のファイル名部分   'C:\TEMP\[リンク元[1].xls].xls]Sheet1'   正確な条件は特定出来ませんが、50回程繰り返すと、ファイルが壊れて開けなくなります。 グラフ以外でも数式内で リンク元[1].xls にリンクを設定した場合でも、 同様の結果となります。 前置きが長くなりましたが、ここで質問です。 まず一番知りたいのが、 1.この壊れた状態のファイルを復旧する方法。 そもそも、ファイル名にカギ括弧を付けなければ良いのですが、 IEが勝手に付けてしまうのです。 Webシステム上でExcelファイルを開く必要があるため、避けられません。 また、IE(6 or 7)以外のブラウザはシステムが未対応のため使用できません。 そこで、次の質問ですが、 2.IEでExcelファイルを開く際に、ファイル名に [1] が付加されないようにする方法。 出来てしまったリンクを解除する方法は、すでに調査済みで分かってますので、 情報は不要です。 何か情報をお持ちの方がいらっしゃいましたら、よろしくお願いします。 (画像は、ファイルが壊れる直前の状態です。)

  • VBAでエクセルからエクセルのファイルを開くには?

    D:\に db1.mdb Book1.xls があります。 db1.mdbのフォームのコマンドボタンをクリックして Book1.xlsを開きたいのですが VBAコードをご教授いただけますか? (マクロではなくVBAコードが知りたいです) エクセルからエクセルのファイルを開くなら Workbooks.Open ファイルのフルパス で出来ました。 ご回答よろしくお願いします。

  • VBA セル入力された日付データから年月のみを取り出してファイル名につけたい

    セル入力された日付データから年月のみを取り出してファイル名につけたい、のですが・・・ 下記のようなイメージです。  A列    B列 1 日付   商品名   2 2009/9/1 みかん    3 2009/9/2 とまと    4 2009/9/15 きゅうり という明細データがある場合、 このファイルのファイル名を明細行の1番上(A2セル)に日付の年月だけにして保存したいのですが、可能でしょうか。 (上の例だと200909.xlsになるようしたいのですが) ちなみに今は↓こんなコードでコピーしたファイルに名前をつけようとしていますが、エラーになってしまいます・・・ Sheets(1).Copy ファイル名 = "\" & Sheets(1).Range("B13").Value & ".xls" ActiveWorkbook.Close SaveChanges:=True, _ Filename:=ThisWorkbook.Path & ファイル名 宜しくお願い致します!

  • EXCEL VBA

    1月から3月までの12シートからなる複数のファイルがあります。 そのファイルを上書き保存したときに書式と値だけをコピーした「ファイル名+シート名」で別ファイルに保存をかけたいのです。 (例) 営業課月次.xlsの4月シートに入力をして、上書き保存をかけた時点で月次4月.xlsにシート名=営業課月次4月で書式と値だけ保存する。 こんな都合のよいVBAがありましたら教えていただきたいと思います。宜しくお願いします。 (VBAに関しては入門編ぐらいの知識しかありません。)

専門家に質問してみよう