シート名毎にExcelファイルを分割するVBAのサンプルコード

記事内に広告が含まれています。

シート名毎にExcelファイルを分割するVBAのサンプルコードを紹介します。

仕様

1ブックに複数のシートが存在するExcelファイルを、シートごとにファイル分割します。

実際に実行してみるために、以下のようなサンプルファイルを用意します。

マクロで実行すると各シートがファイルに分裂します。

実行完了後に、以下3ファイルができるイメージです。

  1. 「AAA.xlsx」
  2. 「BBB.xlsx」
  3. 「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.環境バージョン
1OSWindows10
2ExcelExcel2016
環境一覧

以上です。

コメント

タイトルとURLをコピーしました