エクセル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