RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

【VBA】 新規ブックに現在のブックのシートを全てコピーする - Copy

やりたいこと

  • マクロ入りのブック(.xlsm)を開いている。
  • そのブックの中には、複数のシートがある。
  • VBAを使って、そのすべてのシートを新規ブックにコピーしたい。

方針

  • シート(1) をコピーして、新規ブックを作成する。
  • シート(2) を、新規ブックにコピーする。
  • シート(3) 以降も同様に、新規ブックにコピーする。

ソースコード

'画面の更新を止めて、処理を速くする。
Application.ScreenUpdating = False

'コピーしたいブック
Dim wb As Workbook
Set wb = ThisWorkbook

'コピー先のシート
Dim sh As Worksheet

'シート(1)をコピーする。
'この場合、コピー先の指定がないので、新規ブックを作成する
Call wb.Sheets(1).Copy
Set sh = ActiveSheet

'シート(2)以降をコピーする。
'コピー先は、新規ブックの末尾。
Dim i As Long
For i = 2 To wb.Sheets.Count
	Call wb.Sheets(i).Copy(After:= sh)
	Set sh = ActiveSheet
Next

'画面の更新を再開する。
Application.ScreenUpdating = True

解説

Worksheet.Copy メソッドで、シートのコピーを作成できます。
Call wb.Sheets(1).Copy のように、引数無しで実行すると、新しいブックにシートを作成します。
Call wb.Sheets(i).Copy(After:=sh) のように、引数「After」を指定すると、そのシートの後ろに作成します。
作成したシートはアクティブになるので、ActiveSheet で取得することができます。

コピー元とコピー先でブックのフォーカスの移動が発生するので、コピーするシートの数が増えると、チカチカします。