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を使えば、一度マクロを作るだけで、以降の作業を一気に効率化できます。特に毎月の帳票作成や報告ファイルの分割など、繰り返し行う業務にこそ自動化の効果が高いです。
このシート別保存マクロを活用して、業務効率を一歩先へ進めてみてください。
