VBAでExcelのワークシートを複製する方法についてです。
新しいブックにシートを複製(シート.Copyのみで実行)
シートのコピーは、(指定したシート).Copyという形式で実行されます。
たとえば
たとえば
Worksheets("シート名").Copy
であるとか、Sheets(シートのインデックス番号).Copy
であるとか、Activesheet.Copy
のような形式で実行が可能です。(指定したシート).Copy
だけしか書かずに実行した場合、新しいブックに指定したシートがコピーされます。指定したシートの前にコピー(Before)
' vba
Worksheets("Sheet83").Copy Before:=Worksheets("Sheet3")
シートを(同じブックの)指定したシートの前に移動させるには、Copyの後に
Before:=
を付けて前に挿入したいシートを指定します。実行すると、指定したシートの前にコピーしたシートが挿入されることが確認できます。
指定したシートの後にコピー(After)
' vba
Worksheets("Sheet83").Copy After:=
Worksheets("Sheet3")
同じコードのBeforeを
After:=
に変更して実行してみます。Afterの場合は、指定したシートの後にコピーしたシートが挿入されます。
なお、BeforeとAfterを同時に使用することはできません。
ブックの先頭にコピー
' vba
Worksheets("Sheet83").Copy Before:=Worksheets(1)
ブック内の最初のシート=Worksheets(1)です。()内の数字1はインデックス番号(シートを左から数えた通し番号)となります。それの前にシートを挿入するので、
最初のシートの左、つまりブックの先頭にシートをコピーすることができます。
ブックの末尾にコピー(Sheets.Count)
Countは指定範囲のセルやシートの個数を返すプロパティです。
Worksheets.Countの場合ワークシートの個数、Sheets.Countとした場合はグラフシートなども含むシート全ての個数を返します。
Worksheets.Countの場合ワークシートの個数、Sheets.Countとした場合はグラフシートなども含むシート全ての個数を返します。
' vba
Worksheets("Sheet83").Copy After:=Worksheets(Worksheets.count)
'After:=Sheets(Sheets.count)でもOK
帰る数値をインデックス番号として指定すれば、それはシート全体の数を示すことになります。
After:=Sheets(Worksheets.count)
のようにすると、グラフシートなどある場合に数が合わなくなるのでNG。実行結果です。
複数のシートをコピー(Array)
' vba
Worksheets(Array("Sheet3", "Sheet6")).Copy After:=Worksheets(Worksheets.count)
複数シートをまとめてコピーしたい場合は、Array()の中にシートを,で区切って並べます。区切っていけば3つでも4つでも可能です。
Array=配列のことです。
Array=配列のことです。
実行結果です。
別のブックにコピー
' vba
Worksheets("Sheet83").Copy After:=Workbooks("sunagitsu2.xlsm").Sheets("Sheet1")
新規のブックの場合は冒頭のコードですが、すでにあるブックにコピーする場合はブック名を指定し、その後にシート名を付けます。
また、コピーする前に送り先のブックを開いておく必要があります。
また、コピーする前に送り先のブックを開いておく必要があります。
実行結果です。
関連記事
VBAを使わない通常操作でシートをコピーする方法です。
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント