- ベストアンサー
Excel2007 VBAでワークシートのコピー方法
- Excel2007において複数シートの最後尾をコピーし、新しいシート名を付ける方法について教えてください。
- 現金出納帳のファイルには「23年7月」「23年8月」「23年9月」の3つのシートがあります。マクロ実行時に、「23年9月」のシートをコピーし、新しいシート「23年10月」を作成したいです。
- 使用機種はWindows Vista Excel2007で、質問者はVBAの初心者です。Excel2007において、最後尾のシートをコピーするコードを教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問者様はVBA初心者とのことですので下準備はいりますが簡単なやり方で行きます。 シート名のリストを別シートに作り、追加したシート名をそこから拾ってくる流れです。 1.ワークシートを追加し、名前をつけます。ここでは「月リスト」にします。 2..月リストシートをワークブックの一番左に移動させておきます。 3.月リストシートのセルA1から下に既存シートの名前と、先の年月の名前を入れていきます。 ここではセルA1=月リスト、A2=23年7月、A3=23年8月、A4=23年9月........という具合。セルの書式は文字列にして行なってください。 4.VBAエディターを開き、「挿入」→「標準モジュール」。追加したModule〇に以下のコードを記述。 Sub test() Dim i As Integer i = ThisWorkbook.Worksheets.Count '既存のシート数を取得 Worksheets(i).Copy after:=Worksheets(i) '最終シートをコピーして後ろに挿入 Worksheets(i + 1).Name = Sheets("月リスト").Cells(i + 1, 1).Value '月リストからシート名を取得してシート名変更 End Sub
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
ANo.1です。 必ず月末(月をまたがない範囲で)に行なうのなら、 Worksheets(Worksheets.Count).Copy After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = Format(DateSerial(Year(Date), Month(Date) + 1, 1), "e年m月") こんな感じで如何でしょう。
お礼
n-jun様 ご回答ありがとうございます。 Worksheets(Worksheets.Count).Name = Format(DateSerial(Year(Date), Month(Date) + 1, 1), "e年m月") のコード参考になりました。 新しく作成したシートに「10月1日」の日付を 入力するのその時の参考にさせていただきます。
- n-jun
- ベストアンサー率33% (959/2873)
一番右のシートを更に右にコピペするなら Worksheets(Worksheets.Count).Copy After:=Worksheets(Worksheets.Count) こんな感じかな?
お礼
n-jun様ご回答ありがとうございます ご回答について補足質問がございますので、 そちらの方もご確認いただければ幸いです。
補足
n-jun様 追加の質問で恐縮です。 ご回答のコードで最後尾のシート(一番右のシート)を さらにコピーすることができました。 そのコピーした時に新しくできたシートに新しい名前を 付けるためにはどうすればよいでしょうか? 新しくできたシート名が、「23年9月(2)」ではなく、 、「23年10月」など任意の文字列の名前にするには どうすれば良いでしょうか? もし、ご存知であれば、幸いです。 たびたび恐れ入りますがよろしくお願い申し上げます。
お礼
jin34様 ご回答ありがとうございます。 教えていただいた手順通り作成したら、 新しいシートに新しい任意の名前(23年10月)が 作成できました。助かりました