
複数あるシートのうち、特定の1枚だけを保存したい
別ファイルとして自動保存したいが、手作業だと面倒
VBAで「名前を付けて保存」ってどう書くの?
結論:1行ずつ丁寧に書けば簡単に実装できます



VBAを使えば、特定のシートだけを抜き出して、別のExcelファイルとして保存することができます。
「日報」や「請求書」「申請書」など、テンプレートの一部だけを他部署に共有したいときにも活躍します。
目次
使用する想定シーンと目的
例えばこんな業務があったとします:
- 月次報告書ブック(複数シート)から「営業部」シートだけを提出用に保存したい
- 元ファイルは残したまま、営業部シートだけ別ブック化したい
- 保存先やファイル名もある程度自動化したい
このようなシーンに対応できるのが、以下で紹介するVBAです。
シートをコピーして新規ブックとして保存するVBAコード
Sub シートを別ブックとして保存() Dim 保存対象 As Worksheet Dim 保存ブック As Workbook Dim 保存先パス As String Dim ファイル名 As String ' 保存対象のシート名(例:営業部) Set 保存対象 = ThisWorkbook.Sheets("営業部") ' シートをコピーして新しいブックに 保存対象.Copy ' コピーされたブックを変数に設定 Set 保存ブック = ActiveWorkbook ' 保存先パスとファイル名の設定 保存先パス = ThisWorkbook.Path & "\" ファイル名 = "営業部_" & Format(Date, "yyyymmdd") & ".xlsx" ' 保存 保存ブック.SaveAs Filename:=保存先パス & ファイル名, FileFormat:=xlOpenXMLWorkbook ' ブックを閉じる(保存済みなので変更確認は不要) 保存ブック.Close SaveChanges:=False MsgBox "営業部シートを保存しました!", vbInformation End Sub



最大のメリットは開発者の考えた「ブックの名前ルールが100%反映」されることです。
保存時にファイル名を自動で指定する方法
上記のコードでは Format(Date, "yyyymmdd")
によって今日の日付入りのファイル名が自動生成されます。
ファイル名 = "営業部_" & Format(Date, "yyyymmdd") & ".xlsx"



📌 組織内での「保存ミス」や「名前重複」を防ぐ工夫として有効です。
上書き保存を防ぐ工夫
すでに同じ名前のファイルが存在する場合、上書きしてしまうと困ることもあります。
その場合は、以下のように存在チェックを追加することも可能です。
If Dir(保存先パス & ファイル名) <> "" Then MsgBox "同じ名前のファイルがすでに存在します。", vbExclamation Exit Sub End If
保存後に元ブックへ戻る処理の追加
実行中は「保存先ブック」がアクティブになっていますが、保存後に元のブックに戻りたい場合は、事前にThisWorkbookをアクティブに戻す処理を追加します。
ThisWorkbook.Activate
また、複数シートのコピーや、複数ファイルへの分割などにも応用できます。
まとめと応用例
「.Copy」で特定シートを別ブック化できる
「SaveAs」でファイル名と保存場所を指定可能
「Format」関数でファイル名に日付を含めると管理が楽
上書き防止や戻り処理も一緒に書くとより実用的に
コメント