【Excelマクロ】シートごとに別ファイルとして保存する方法

1ブック内に複数シート、どう整理する?

Excelでは、ひとつのブックに複数のシートをまとめて管理するのが一般的です。たとえば、部署ごとのデータを1つのファイルに集約して管理することもあると思います。

しかし、反対に「各シートを別ファイルに分けて保存したい」と思うことがあります。たとえば、各担当者にシートを配布する必要がある場合や、データ提出フォーマットとして個別のファイルが求められる場合などです。

手作業でコピー&保存を行うのは手間も時間もかかります。そこで活躍するのが「VBAによるシート別保存マクロ」です。

Excel VBAを使って、各シートを1ファイルずつ自動で保存する方法を解説していきます。

保存用マクロの基本構成とコード解説

まずは、すべてのシートをそれぞれ1つのExcelファイルとして保存する基本マクロを紹介します。

Sub SaveEachSheetAsFile()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim newWb As Workbook
    Dim path As String

    Set wb = ThisWorkbook
    path = wb.Path & "¥"

    'シートが表示されている場合はコピーする
    For Each ws In wb.Worksheets
        If ws.Visible = xlSheetVisible Then

            ws.Copy

            Set newWb = ActiveWorkbook

            Application.DisplayAlerts = False
            newWb.SaveAs Filename:=path & ws.Name & ".xlsx", FileFormat:=xlOpenXMLWorkbook
            newWb.Close SaveChanges:=False
            Application.DisplayAlerts = True

        End If
    Next ws

    MsgBox "各シートを個別ファイルとして保存しました!"

End Sub

コードの解説

  • wb は操作しているブック。
  • ws はシートを左から順番に扱うための変数です。
  • ws.Copy によって、そのシートだけの新しいブックが作られます。
  • newWb.SaveAs で、シート名を使ったファイル名で保存します。
  • Application.DisplayAlerts = False にして、上書き確認などのポップアップを抑制します。

シート名がファイル名になるので、あらかじめ重複や記号の混入に注意しましょう。

保存処理の注意点と補足機能の追加

保存先フォルダを明確に指定したい場合

フォルダを選択させるように変更する場合は、次のようにします。

Dim fPath As String

With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "保存先フォルダを選択してください"
    If .Show = -1 Then
        fPath = .SelectedItems(1) & "\"
    Else
        MsgBox "保存処理を中断しました。"
        Exit Sub
    End If

End With

このようにすることで、ユーザーが保存先を選べる柔軟なマクロになります。

シート名に使用できない文字の対処

ファイル名として不正な文字(例:\ / * ? [ ])が含まれていると、保存時にエラーになります。

次のように、事前に取り除く処理を入れておくと安心です。

sheetName = Replace(ws.Name, "\", "")
sheetName = Replace(sheetName, "/", "")
sheetName = Replace(sheetName, "*", "")
' 必要に応じて他の記号も追加

実装するメリットと整理のポイント

このマクロを実装することで、次のような効果があります。

  • 手作業による保存の手間を削減できる
  • 人的ミス(上書き、保存忘れ)を防げる
  • 担当者ごとのファイル作成をスピーディーに実現
  • 毎月のルーティン作業として繰り返し使える

ポイントの整理

  • 保存前にフォルダやシート名をチェックしておくと安定稼働
  • 使い回しがしやすいように、処理をサブプロシージャに分けるのも有効
  • ファイル名に日付をつけるなどの応用も可能

まとめ

「シートごとに別ファイルとして保存したい」というニーズは、日々の業務で意外と多く登場します。

VBAを使えば、一度マクロを作るだけで、以降の作業を一気に効率化できます。特に毎月の帳票作成や報告ファイルの分割など、繰り返し行う業務にこそ自動化の効果が高いです。

このシート別保存マクロを活用して、業務効率を一歩先へ進めてみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール