【VBA】指定した複数のワークシートのみを保存する

エクセルVBAでよく使うコードの備忘録。ワークブック全体ではなく、ブック内の一部のシートのみを選択して別ファイルに保存するコード。

スポンサーリンク

新規ブックに指定ワークシートをコピー

指定したワークシートのみを保存する方法はいくつか考えられますが、わかりやすいのは「一度、保存したいワークシートのみが含まれるワークブックを新規に作成し、それに名前を付けて保存」する方法です。下記では、この方針に沿ってコードを書いています。

まず、「Workbooks.Add」で新規のワークブックを作成します。このワークブックには、ワークシートがデフォルトの名前で一つ含まれます。別にこのままでも良いのですが、以降で指定ワークシートをこの新規のワークブックにコピーしてくる際、同じ名前のワークシートがあると「Sheet1 (2)」みたいなカッコがついてしまうので、ダミーの変な名前を生成されたワークシートに着けています。後は保存したワークシートを全てコピーしてきて、SaveAsメソッドで名前を付けて保存すればOKです。(パスワードを付けるなど、SaveAsメソッドのオプションについてはこちらをご参照ください。)

サンプルコード

Public Sub SaveSelectedSheets()
    
    '--- 新規にワークブックを作る ---'
    Dim wb As Workbook
    Set wb = Workbooks.Add
    
    '--- 同じ名前のシートがあると処理が面倒なので適当な名前を付ける ---'
    wb.Worksheets(1).Name = "@dummy"
    
    '--- ワークシートをコピー ---'
    Call ThisWorkbook.Worksheets("[ワークシート名1]").Copy(Before:=wb.Sheets(1))
    Call ThisWorkbook.Worksheets("[ワークシート名2]").Copy(Before:=wb.Sheets(1))
    ...

    '--- ワークブックに名前を付けて保存 ---'
    Dim filePath As String
    filePath = "[保存ファイルのパス]"
    
    Call wb.SaveAs(filePath)
       
End Sub