シート名毎にExcelファイルを分割するVBAのサンプルコードを紹介します。
仕様
1ブックに複数のシートが存在するExcelファイルを、シートごとにファイル分割します。
実際に実行してみるために、以下のようなサンプルファイルを用意します。
マクロで実行すると各シートがファイルに分裂します。
実行完了後に、以下3ファイルができるイメージです。
- 「AAA.xlsx」
- 「BBB.xlsx」
- 「CCC.xlsx」
ソースコード
今回はシートをいじらずそのまま出力したいので、シート上にボタン等は置きません。
Visual Basic Editorを開き、ThisWorkbook上にそのまま、下記のSplitSheet()関数を配置しました。
ソースコード
Option Explicit
Sub SplitSheet()
Dim wkSheet As Worksheet
Dim newBook As Workbook
Dim newBookName As String
Dim folderParent As String
Dim i As Long
'シートの保存先
folderParent = ThisWorkbook.Path & "\"
For i = 1 To ThisWorkbook.Worksheets.Count
'シートを新しいブックにコピー
ThisWorkbook.Worksheets(i).Copy
'移動先のブック
Set newBook = ActiveWorkbook
'シート名 ※シート位置 + シート名
newBookName = i & "_" & newBook.Sheets(1).Name & ".xlsx"
'新しいブックを保存
newBook.SaveAs folderParent & newBookName
'新しいブックを閉じる
newBook.Close
Next
End Sub
実行
では実行します。
実行手順
「開発」メニューから「マクロ」を選びSplitSheet関数を直接実行します。
実行結果
実行後、各シートごとにファイルができています。
※整列させるためにシート順にファイル名の頭にシート番号を入れます。
各分割後のファイルも情報が消えていることはありませんでした。
1_AAA.xlsx
2_BBB.xlsx
3_CCC.xlsx
ただこれ弱点があるんですよね。。
マクロなのでブック自体にマクロ組み込まないといけないという・・
かっこ悪いですけど、別のマクロから読み込む形式にするか、PowerShellで組んだほうがよさそうです。
PowerShell版を記事にしましたので、よかったら参考にしてみてください。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | Excel | Excel2016 |
以上です。
コメント