【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 で取得することができます。
コピー元とコピー先でブックのフォーカスの移動が発生するので、コピーするシートの数が増えると、チカチカします。