Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Excel VBA】シートを別ブックに分割する方法(1シートずつ自動保存)

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 を使って自動化できます。