Excel VBA(マクロ)でワークシートをコピーする方法/Worksheets.Copyメソッドの使い方

paper IT

VBAでExcelのワークシートを複製する方法についてです。

スポンサーリンク

新しいブックにシートを複製(シート.Copyのみで実行)

sheetscopy1
シートのコピーは、(指定したシート).Copyという形式で実行されます。
たとえばWorksheets("シート名").Copyであるとか、
Sheets(シートのインデックス番号).Copyであるとか、
Activesheet.Copyのような形式で実行が可能です。
sheetscopy2
(指定したシート).Copyだけしか書かずに実行した場合、新しいブックに指定したシートがコピーされます。

指定したシートの前にコピー(Before)

' vba
Worksheets("Sheet83").Copy Before:=Worksheets("Sheet3")
シートを(同じブックの)指定したシートの前に移動させるには、Copyの後にBefore:=を付けて前に挿入したいシートを指定します。
sheetscopy3
実行すると、指定したシートのにコピーしたシートが挿入されることが確認できます。

指定したシートの後にコピー(After)

' vba
Worksheets("Sheet83").Copy After:=Worksheets("Sheet3")
同じコードのBeforeをAfter:=に変更して実行してみます。
sheetscopy4
Afterの場合は、指定したシートのにコピーしたシートが挿入されます。

なお、BeforeとAfterを同時に使用することはできません。

ブックの先頭にコピー

' vba
Worksheets("Sheet83").Copy Before:=Worksheets(1)
ブック内の最初のシート=Worksheets(1)です。()内の数字1はインデックス番号(シートを左から数えた通し番号)となります。それの前にシートを挿入するので、
sheetscopy5
最初のシートの左、つまりブックの先頭にシートをコピーすることができます。

ブックの末尾にコピー(Sheets.Count)

' vba
Worksheets("Sheet83").Copy After:=Worksheets(Worksheets.count)
'After:=Sheets(Sheets.count)でもOK

帰る数値をインデックス番号として指定すれば、それはシート全体の数を示すことになります。
After:=Sheets(Worksheets.count)のようにすると、グラフシートなどある場合に数が合わなくなるのでNG。
sheetscopy6
実行結果です。

複数のシートをコピー(Array)

' vba
Worksheets(Array("Sheet3", "Sheet6")).Copy After:=Worksheets(Worksheets.count)
複数シートをまとめてコピーしたい場合は、Array()の中にシートを,で区切って並べます。区切っていけば3つでも4つでも可能です。
Array=配列のことです。
sheetscopy7
実行結果です。

別のブックにコピー

' vba
Worksheets("Sheet83").Copy After:=Workbooks("sunagitsu2.xlsm").Sheets("Sheet1")

新規のブックの場合は冒頭のコードですが、すでにあるブックにコピーする場合はブック名を指定し、その後にシート名を付けます。
また、コピーする前に送り先のブックを開いておく必要があります。
sheetscopy8
実行結果です。

関連記事

やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント