• ベストアンサー

エクセルのシートを自動でコピー

エクセルの2000を使用しています。 こんなことが出来るかどうか教えてください。 「原紙」というシートをコピーして自動的に6月だったら6月1日から30日までのシートを作成したいのです。シート名は6月なら20070601とか日にちのわかるような表示のシート名にしたいのです。 毎回コピーをとってシート名を変更しているのですが、これが結構手間がかかってしまします。 宜しくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

以下のマクロを実行すると、実行した月の1日~月末日分だけシートを コピーします。コピー元のシート名は2行目を修正して下さい Sub Macro1() Const org As String = "原紙" Dim dt As Date  For dt = DateSerial(2007, Month(Date), 1) _   To DateSerial(2007, Month(Date) + 1, 0)     Worksheets(org).Copy after:=ActiveSheet     ActiveSheet.Name = Format(dt, "YYYYMMDD")  Next dt End Sub マクロはALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。

kuwong
質問者

補足

ありがとうございます。 もうひとつお聞きしたいのですが、 こういうのは可能でしょうか? 例えば、作成時にメッセージみたいなので、何年何月の作成をしますかっていうのを表示してそこに入力すると、その該当月分の上記のようなシートを自動で作成ってことはちょっと無理でしょうか?

その他の回答 (1)

noname#97729
noname#97729
回答No.2

Sub Macro1() Const org As String = "原紙" Dim dt As Date Dim yer, mot As String yer = InputBox("年を設定して下さい 例:2007") '年を収得 If yer = "" Then MsgBox "キャンセルされました" Exit Sub End If mot = InputBox("月を設定して下さい 例:5") '月を収得 If mot = "" Then MsgBox "キャンセルされました" Exit Sub End If For dt = DateSerial(Val(yer), Val(mot), 1) To DateSerial(Val(yer), Val(mot) + 1, 0) Worksheets(org).Copy after:=ActiveSheet ActiveSheet.Name = Format(dt, "YYYYMMDD") Next dt MsgBox "終了" End Sub -------------------------------------------------- No1さんのをすこし手をくわえました。 入力する数値は間違えないで下さい。

kuwong
質問者

お礼

ありがとうございます。早速試してみます。

関連するQ&A

専門家に質問してみよう