完成したレポートシートだけをメールで送りたい、あるいは特定の複数シートだけをまとめて別ファイルとして保存したい、といった場面はよくあります。
VBAの.Copy
や.Move
メソッドを使えば、シートを新しいブックに切り出す操作を簡単に行えます。この記事では、既存のシートを基に新しいExcelファイルを作成する、実用的な3つの方法を解説します。
1. 1枚のシートをコピーして新規ブックを作成する(基本)
最も一般的なのが、特定のシート1枚だけを新しいブックにコピーする方法です。
コードと解説
Sub CreateNewBookFromSingleSheet()
' コピーしたいシートを準備
Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Worksheets("月次レポート")
' --- 1. シートをコピー ---
' .Copyメソッドの引数を省略すると、新しいブックが自動で作られます
sourceSheet.Copy
' --- 2. 新しく作られたブックを保存 ---
' コピー直後は、新しく作られたブックがアクティブになっています
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & sourceSheet.Name & "_単体.xlsx"
' 不要であれば、保存後に閉じる
' ActiveWorkbook.Close
MsgBox "「" & sourceSheet.Name & "」シートから新しいブックを作成しました。"
End Sub
Worksheet
オブジェクトの.Copy
メソッドは、Before
やAfter
といった位置を指定する引数を省略すると、コピーしたシートだけを含む新しいブックを自動的に作成します。
コピーが実行された直後は、その新しく作成されたブックがアクティブな状態(ActiveWorkbook
)になるため、すぐにSaveAs
メソッドで名前を付けて保存することができます。
2. 複数のシートをまとめて新規ブックにコピーする
複数のシートを一度に新しいブックへまとめることも可能です。Array
関数を使って、コピーしたいシート名を列挙します。
コードと解説
Sub CreateNewBookFromMultipleSheets()
' --- 1. 複数のシートを名前で指定してコピー ---
' Array関数の中に、コピーしたいシート名をカンマ区切りで記述します
ThisWorkbook.Worksheets(Array("サマリー", "データ詳細", "グラフ")).Copy
' --- 2. 新しく作られたブックを保存 ---
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\複数シートまとめ.xlsx"
MsgBox "3枚のシートから新しいブックを作成しました。"
End Sub
Worksheets
コレクションにシート名の配列を渡すことで、指定されたシートがすべてコピーされた新しいブックが作成されます。シートの順番は、配列で指定した順番になります。
3. シートを「移動」して新規ブックを作成する
.Copy
メソッドとの大きな違いは、.Move
メソッドが元のブックからシートを**完全に移動(削除)**させる点です。
コードと解説
Sub CreateNewBookByMovingSheet()
' 移動したいシート(この操作の後、元のブックからなくなります)
Dim sheetToMove As Worksheet
Set sheetToMove = ThisWorkbook.Worksheets("アーカイブデータ")
' --- 1. シートを移動 ---
' .Moveメソッドも引数を省略すると、新しいブックが作られます
sheetToMove.Move
' --- 2. 新しく作られたブックを保存 ---
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & sheetToMove.Name & "_移動ファイル.xlsx"
MsgBox "「" & sheetToMove.Name & "」シートを新しいブックに移動しました。"
End Sub
.Move
メソッドも.Copy
と同様に、引数を省略するとそのシートだけを含む新しいブックを作成します。ただし、実行後に元のブックからそのシートはなくなります。 アーカイブ化など、シートを完全に分離させたい場合に利用します。
まとめ:3つの方法の使い分け
方法 | 構文 | 元のシートの処遇 | 主な用途 |
単一シートコピー | Worksheets("名前").Copy | 残る | 特定のシートだけを別ファイルで共有したい時。 |
複数シートコピー | Worksheets(Array(...)).Copy | 残る | 関連する複数シートをセットで配布したい時。 |
シート移動 | Worksheets("名前").Move | なくなる | シートを元のブックから完全に切り離し、アーカイブ化したい時。 |
Google スプレッドシートにエクスポート
これらのメソッドを使い分けることで、VBAによるファイル作成や整理の自動化が、より柔軟に行えるようになります。