VBA でシートをコピーするときは、Copy メソッドを使用します。ここでは、Copy メソッドの使い方について説明します。
Copy メソッドの使い方
Copy メソッドの構文は以下の通りです。
1 |
コピーするシート.Copy(Before, After) |
Copy メソッドではコピーしたシートを指定したシートの前、あるいは後ろに挿入するかを引数で指定します。
引数のシートを指定するときは Before や After の後にコロンとイコール := をつけて指定します。この := は、引数の順序に関係なく、特定の引数へ値を設定するときに用います。また、Before と After を同時に使用することはできません。
もし引数に何も指定しなかった場合は、新規のブックにコピーされます。
以下は、Sheet1 を Sheet2 の後の位置にコピーする例です。
1 |
Worksheets("Sheet1").Copy After := Worksheets("Sheet2") |
この場合、コピーされたシート名「Sheet1 (2)」のような形で自動的に名付けられます。
シートを先頭にコピーする
以下は、Sheet1 を先頭の位置にコピーする例です。
1 |
Worksheets("Sheet1").Copy Before := Worksheets(1) |
引数の Before に1番目のシートを指定することで、先頭の位置にシートをコピーすることができます。
シートを末尾にコピーする
以下は、 Sheet1 を末尾の位置にコピーする例です。
1 |
Worksheets("Sheet1").Copy After := Worksheets(Worksheets.Count) |
まず、Worksheets.Count を使用して末尾のシートのインデックス番号を取得しています。そのインデックス番号を利用してシートを取得し、 After の引数に指定することによって末尾の位置にシートをコピーしています。
名前を指定してコピーする
以下は、シートに名前を付けてコピーする例です。この例ではシート名の末尾に日付を付けています。
1 2 3 4 5 |
Dim todayDate as String Worksheets("Sheet1").Copy Before := Worksheets(1) ' 先頭にコピー todayDate = Format(Date, "yyyymmdd") ' 今日の日付を取得 ActiveSheet.Name = "売上データ" & todayDate ' 末尾に日付を付ける |
シートをコピーすると新しくコピーされたシートがアクティブになるので、ActiveSheet.Name で名前を変更してます。上のプログラムを実行すると、Sheet1 がコピーされ「売上データ20160819」のような名前のシートが作成されます。
名前を付けるとき、既に存在するシートの名前を付けようとするとエラーになるので注意してください。