目次

ワークシートをコピー

今回は、 Excel のワークシートを同じワークブック内にコピーするマクロを作成してみました。

ワークシートのコピーは「Worksheets」オブジェクトの「Copy」メソッドで可能なようです。

目次まで戻る

マクロの一例

「Sheet1」をコピーして「Sheet3」の後ろに挿入する下記マクロを作成してみました。

「after:=Worksheets("Sheet3")」の記述で「Sheet3」の後ろにコピーするという指定になるようです。

Sub Sheet1をコピーしてSheet3の後ろに挿入()
Worksheets("Sheet1").Copy after:=Worksheets("Sheet3")
End Sub

上記マクロを下記画像のワークシートの状態で実行してみます。コピーした結果が分かりやすいように「Sheet1」の背景色を黄色に塗りつぶしてあります。

Sheet1 ~ 3 が存在している。 Sheet1 は黄色に着色している。
Sheet1 ~ 3 が存在している。 Sheet1 は黄色に着色している。

上記マクロを実行してみると、「Sheet1」が「Sheet3」の後ろにコピーされたようです。

「Sheet1」が二つになってしまうので「Sheet1 (2)」というワークシート名が自動的に付けられたようです。

「Sheet1 (2)」というワークシートが作成されている。
「Sheet1 (2)」というワークシートが作成されている。

目次まで戻る

before

「Sheet1」をコピーして「Sheet3」の前に挿入するマクロも作成してみました。

「before」パラメーターで指定したワークシートの前にコピーしたワークシートが配置されるようです。下記マクロを一例目のマクロに続けて実行してみます。

Sub Sheet1をコピーしてSheet3の前に挿入()
Worksheets("Sheet1").Copy before:=Worksheets("Sheet3")
End Sub

上記マクロを実行してみると、「Sheet1」が「Sheet3」 の前にコピーされたようです。三つ目の「Sheet1」なので「Sheet1 (3)」という名前になっています。

ワークシート「Sheet1 (3)」が作成されている。
ワークシート「Sheet1 (3)」が作成されている。

目次まで戻る

コピー後に名前変更

ワークシートをコピーした後に名前変更を行う場合は、アクティブなワークシートの名前を変更する事で可能なようです。下記マクロを続けて実行してみます。

Sub Sheet1をコピーしてSheet1の前に挿入してワークシート名をAに変更()
Worksheets("Sheet1").Copy before:=Worksheets("Sheet1")
Debug.Print ActiveSheet.Name
ActiveSheet.Name = "A"
End Sub

上記マクロを実行してみると、「Sheet1」の前にワークシート「A」が作成されました。

コピー直後はコピー先のワークシートがアクティブになっているようです。
コピー直後はコピー先のワークシートがアクティブになっているようです。

VBE(VisualBasicEditor)のイミディエイトウィンドウには以下の内容が出力されました。一旦「Sheet1 (4)」が作成されたようです。

Sheet1 (4)

目次まで戻る

複数シートをコピー

複数のワークシートをまとめてコピーする場合は、 Array 関数で配列を指定する事でコピー可能なようです。下記マクロを続けて実行してみます。

Sub Sheet1とSheet2をコピーしてSheet1の後ろに挿入()
Worksheets(Array("Sheet1", "Sheet2")).Copy after:=Worksheets("Sheet1")
Debug.Print ActiveSheet.Name
End Sub

マクロを実行してみると、「Sheet1」の後ろに「Sheet1 (4)」と「Sheet2 (2)」が作成されました。「Sheet1」「Sheet2」をまとめてコピー出来たようです。

配列での複数シートのコピーに成功しました。
配列での複数シートのコピーに成功しました。

VBE のイミディエイトウィンドウには以下の内容が出力されました。コピー後の一枚目のワークシートがアクティブになっているようです。

Sheet1 (4)

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿