【Excel VBA】既存のシートから新しいブックを作成する3つの方法

完成したレポートシートだけをメールで送りたい、あるいは特定の複数シートだけをまとめて別ファイルとして保存したい、といった場面はよくあります。

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メソッドは、BeforeAfterといった位置を指定する引数を省略すると、コピーしたシートだけを含む新しいブックを自動的に作成します。

コピーが実行された直後は、その新しく作成されたブックがアクティブな状態(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によるファイル作成や整理の自動化が、より柔軟に行えるようになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次