複数のワークシートを同時にコピーする方法を、3つ紹介します。
目的や状況に応じて、使いやすい方法を選んでください。
シート名を配列で指定してコピー
Worksheets(Array(“○○”,”○○”)).Copyと書き、○○の部分に「シート名」を指定します。
1番基本的な書き方で、「コピーするシートのシート名がわかっている時」の方法です。
シート名はダブルクォーテーションで囲みます。
コピーするシートの数だけ、カンマ(,)でシート名をつなげていきます。
コード
1 2 3 4 |
'コピーするシートをシート名で指定 Worksheets(Array("5月売上", "6月売上", "7月売上")).Copy |
解説
シート「5月売上」、「6月売上」、「7月売上」が新しいエクセルファイルにコピーされます。
初めて使う人にはピンときにくい関数です。
最初のうちは、「配列(複数の値)を渡す時は、Array関数を頭に付けて渡す」と割り切って、使いながら慣れていけばOKです。
インデックスを配列で指定してコピー
Worksheets(Array(○○,○○)).Copyと書き、○○の部分に「インデックス(何番目)」を指定します。
最初に紹介したシート名の指定とは違い、ダブルクォーテーションで囲まないので注意してください。
「シート名はわからないけど、何番目かわかっている時」、「処理によってシート名が違う時」は、このインデックスによる指定でシートをコピーします。
インデックスはダブルクォーテーションで囲みません。
コピーするシートの数だけ、カンマ(,)でインデックスをつなげていきます。
コード
1 2 3 4 |
'コピーするシートをインデックス番号で指定 Worksheets(Array(1, 2, 3)).Copy |
解説
ブックの左から1、2、3番目のシートが新しいブックにコピーされます。
選択状態の複数シートをコピー
「プログラムの処理などで、コピーするシートがすでに選択状態になっている時」は、ActiveWindow.SelectedSheets.Copyで選択状態のシートをコピーできます。
コード
1 2 3 4 5 6 7 |
'コピーするシートをインデックス番号で選択 Worksheets(Array(1, 2, 3)).Select '選択しているシートをコピーする ActiveWindow.SelectedSheets.Copy |
解説
今回のプログラムでは、Worksheets(Array(1, 2, 3)).Selectで、左から1、2、3番目のシートを選択状態にしています。
そのため、ActiveWindow.SelectedSheets.Copyでブックの左から1、2、3番目のシートがコピーされます。
その他テクニックは、次の記事を参考にしてください。
https://excel-toshokan.com/vba-sheet-copy/