Excel VBAでシートをコピーする方法を説明します。
シートをコピーする
シートをコピーするときには、WorksheetオブジェクトのCopyメソッドを使います。使い方としては以下二つがあり、コピー先シートの前後どちらにコピーするかによってBeforeとAfterを使い分けます。
- コピー元Worksheetオブジェクト.Copy Before:=コピー先Worksheetオブジェクト
- コピー元Worksheetオブジェクト.Copy After:=コピー先Worksheetオブジェクト
シートをコピーするサンプルコード
これだけではピンとこないので、以下に自分がよく使用するサンプルを紹介します。
注意
どのサンプルも”コピー元”シートの名前をご自身がコピーしたいシート名に合わせてください。先頭にシートをコピー
例えば月別のシートなど、先頭のシートを最新にしておきたいような場合に使います。
先頭にシートをコピーしたい場合
copy
Worksheets("コピー元").Copy Before:Worksheets(1)
コピー元の一つ手前にコピー
対象シートの一つ手前にコピーしたい場合
copy
Worksheets("コピー元").Copy Before:=Worksheets("コピー元")
最後にシートをコピー
目次があるようなExcelで、最後に追加したシートを最後尾にしておきたい場合に使います。
最後尾にシートをコピーしたい場合
copy
Worksheets("コピー元").Copy After:=Worksheets(Worksheets.Count)
コピー元の一つ後にコピー
対象シートの一つ後にコピーしたい場合
copy
Worksheets("コピー元").Copy After:=Worksheets("コピー元")
メモ
なお、上記はすべて同じブック内でのCopyメソッドのサンプルですが、他のブックにコピーすることも可能です(他のブックはあらかじめ開いておく必要があります)。
コピーしたシート名を変更
上記のコピーした画像を見てもらうと分かるように、コピーしたシート名が”コピー元(2)”のようになってしまいます。
そのため、コピーしたシートの名前を変更したい場合には、コピーした後にActiveSheet.Nameに値を設定して名前を変更しましょう。
コピー後のシート名を変更
copy
Worksheets("テンプレート").Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "ここにシートの名前を設定してください"
関連記事
シートコピーの応用記事の紹介です。
特定のフォルダにある複数のExcelファイルからシートをコピーしたい、というような場合のマクロを以下の記事で紹介しています。興味のある方はご覧ください。
