MENU

【初心者向け】VBAで特定のシートのみを選択して別ブックとして名前を付けて保存する方法

A子さん

複数あるシートのうち、特定の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」関数でファイル名に日付を含めると管理が楽

上書き防止や戻り処理も一緒に書くとより実用的に

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

この記事を書いた人

コメント

コメントする

CAPTCHA


目次