
Excelでよくある作業の1つがこれです。
- シートごとに別ファイルにしたい
- 担当者ごとに配布したい
- 月別シートを個別保存したい
そんな時は、VBAでシートを1つずつ別ブックに分割保存できます。
この記事では、その方法を説明します。
基本コード
Sub SplitSheets()
Dim ws As Worksheet
Dim folderPath As String
' 保存先フォルダ
folderPath = "C:\Test\"
' すべてのシートを順番に処理
For Each ws In Worksheets
' シートをコピー(新しいブックになる)
ws.Copy
' 新しいブックを保存
ActiveWorkbook.SaveAs _
Filename:=folderPath & ws.Name & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook
' 保存後に閉じる
ActiveWorkbook.Close False
Next ws
End Sub
コードの流れ
このマクロは次の順番で動きます。
① シートを1枚コピー
ws.Copy
これでそのシートだけの新しいExcelブックが作られます。
② ファイル名を付けて保存
ActiveWorkbook.SaveAs _
Filename:=folderPath & ws.Name & ".xlsx"
例えばシート名が
売上
なら、
C:\Test\売上.xlsx
として保存されます。
③ ブックを閉じる
ActiveWorkbook.Close False
保存したら閉じて次のシートへ進みます。
実行結果
例えば元のブックに
- 売上
- 在庫
- 集計
という3枚のシートがあると、
保存先フォルダに
- 売上.xlsx
- 在庫.xlsx
- 集計.xlsx
が自動作成されます。
注意点
保存先フォルダは事前に作成
folderPath = "C:\Test\"
このフォルダが存在しないとエラーになります。
同名ファイルがあると上書き確認が出る
必要なら DisplayAlerts=False を使って自動化できます。