Excel VBAでシートをコピーする:Copy

VBA でシートをコピーするときは、Copy メソッドを使用します。ここでは、Copy メソッドの使い方について説明します。

Copy メソッドの使い方

Copy メソッドの構文は以下の通りです。

コピーするシート.Copy(Before, After)

Copy メソッドではコピーしたシートを指定したシートの前、あるいは後ろに挿入するかを引数で指定します。

引数のシートを指定するときは Before や After の後にコロンとイコール := をつけて指定します。この := は、引数の順序に関係なく、特定の引数へ値を設定するときに用います。また、Before と After を同時に使用することはできません

もし引数に何も指定しなかった場合は、新規のブックにコピーされます。

以下は、Sheet1 を Sheet2 の後の位置にコピーする例です。

Worksheets("Sheet1").Copy After := Worksheets("Sheet2")

この場合、コピーされたシート名「Sheet1 (2)」のような形で自動的に名付けられます。

シートを先頭にコピーする

以下は、Sheet1 を先頭の位置にコピーする例です。

Worksheets("Sheet1").Copy Before := Worksheets(1)

引数の Before に1番目のシートを指定することで、先頭の位置にシートをコピーすることができます。

シートを末尾にコピーする

以下は、 Sheet1 を末尾の位置にコピーする例です。

Worksheets("Sheet1").Copy After := Worksheets(Worksheets.Count)

まず、Worksheets.Count を使用して末尾のシートのインデックス番号を取得しています。そのインデックス番号を利用してシートを取得し、 After の引数に指定することによって末尾の位置にシートをコピーしています。

名前を指定してコピーする

以下は、シートに名前を付けてコピーする例です。この例ではシート名の末尾に日付を付けています。

Dim todayDate as String

Worksheets("Sheet1").Copy Before := Worksheets(1) ' 先頭にコピー
todayDate = Format(Date, "yyyymmdd")             ' 今日の日付を取得
ActiveSheet.Name = "売上データ" & todayDate      ' 末尾に日付を付ける

シートをコピーすると新しくコピーされたシートがアクティブになるので、ActiveSheet.Name で名前を変更してます。上のプログラムを実行すると、Sheet1 がコピーされ「売上データ20160819」のような名前のシートが作成されます。

名前を付けるとき、既に存在するシートの名前を付けようとするとエラーになるので注意してください。


イベント

2017/10/06(金)
UX School(全10回)