【マクロ・VBA コード・ファイルダウンロード可】複数のSheetを複数bookに変換するマクロ

アイキャッチ画像 book間

複数のSheetを複数bookに変換するマクロを紹介します

ダウンロードファイルもありますので良かったら試してみてください

またマクロコードも紹介しています

使用方法解説動画↓

仕事において1つのbookに同じ形式のSheetをいくつも作成し、データを保管・管理してる場合ってありますよね

例えば、部下の評価シートやお得意様情報などなど

共有や添付するときは新しいbookを作成し、作成したbookに必要なSheetだけコピペする必要があります

1つや2つbookを作成するならすぐにできるけど、これが10や20なら時間も手間もミスも起こります

限られた時間を単純作業で消費するのはもったいなく生産性も悪いです

あと単純にめんどくさいですよね

このマクロファイルもしくはマクロコードを使えば簡単に必要なSheetを10や20、100でもbookに変換することができます

このマクロを使って、1分でも早く仕事を終わらせましょう

目指せ定時退社!

ダウンロードファイル

ファイルです→複数のSheetを複数bookに変換するマクロ.xlsm

※インターネットからのマクロは、Office では既定でブロックされますので許可する必要があります

詳細はマイクロソフトが公開してますので参考にしてください →詳細ページ

ファイルダウンロードがちょっと怖いという方はコードをコピペして使ってください

ファイルを開くと黄色タスクバーが出てくるので、「編集を有効にする」を押すと

マクロの許可の画像

今度は赤色のタスクバーがでできます「詳細を表示」を押してもうまく動かせないので
次の操作をしてください

マクロの許可の画像

使いたいファイルの「プロパティ」を開きます

マクロの許可の画像

赤枠の中の「許可する(K)」にチェックを入れて「適用」をクリックしてください

マクロの許可の画像

すると赤枠がなくなるので使えるようになります

マクロの許可の画像

マクロコード

※マクロを入れる場合、EXCELファイルをマクロ形式にしてください

その後、Alt+F11でマクロの画面に移り変わるので、Alt+I+Mを押して

表示した画面にコピペしてください

下の記事にマクロの取り込み方法をまとめたのでよかったら参考にしてください

読込データ格納用フォルダ作成

Sub 読込データ格納用フォルダ作成()

'変数////////////////////////////////////////////////////
Dim FSO As Object 'ファイルシステムオブジェクト用変数

Set FSO = CreateObject("Scripting.FileSystemObject")

Dim wb As Workbook: Set wb = ThisWorkbook 'このbook用変数

'読込データ格納用フォルダ作成/////////////////////////////////////////////////////

If FSO.FolderExists(wb.Path & "¥" & "読込データ格納用フォルダ") = False Then '読込データ格納用フォルダがないとき
    
    FSO.CreateFolder wb.Path & "¥" & "読込データ格納用フォルダ" 'フォルダを作成
    
    MsgBox "読込データ格納用フォルダを作成しました" & vbCrLf & vbCrLf & "読込たいデータを「読込データ格納用フォルダ」に入れてください"
    
Else '読込データ格納用フォルダがあった場合
    MsgBox "読込データ格納用フォルダは既に作成されてます"
End If

Set FSO = Nothing
End Sub

作成book格納用フォルダ作成

Sub 作成book格納用フォルダ作成()

'変数////////////////////////////////////////////////////
Dim FSO As Object 'ファイルシステムオブジェクト用変数

Set FSO = CreateObject("Scripting.FileSystemObject")

Dim wb As Workbook: Set wb = ThisWorkbook 'このbook用変数

'作成book格納用フォルダ作成/////////////////////////////////////////////////////

If FSO.FolderExists(wb.Path & "¥" & "作成book格納用フォルダ") = False Then '作成book格納用フォルダがないとき
    
    FSO.CreateFolder wb.Path & "¥" & "作成book格納用フォルダ" 'フォルダを作成
    
    MsgBox "作成book格納用フォルダを作成しました" & vbCrLf & vbCrLf & "Sheetから変換されたbookは「作成book格納用フォルダ」に出力されます"
    
Else '作成book格納用フォルダがあった場合
    MsgBox "作成book格納用フォルダは既に作成されてます"
End If

Set FSO = Nothing
End Sub

既存Sheetの削除

Sub 既存Sheetの削除()

'変数////////////////////////////////////////////////////
Dim wb As Workbook: Set wb = ThisWorkbook 'このbook用変数

Dim ws_メイン As Worksheet: Set ws_メイン = wb.Sheets("メイン") '集計データSheet用変数

Dim ws As Worksheet 'カウンター変数用

'既存Sheetの削除////////////////////////////////////////////////
For Each ws In wb.Sheets 'Sheetのループ処理

    If ws.Name <> "メイン" Then 'Sheet名が「メイン」出ないとき
    
        Application.DisplayAlerts = False '警告表示の非表示設定
        
            ws.Delete '該当Sheetを削除
        
        Application.DisplayAlerts = True '警告表示の表示設定
    
    End If

Next

End Sub

複数のSheetを複数bookに変換するマクロ

Sub 複数のSheetを複数bookに変換するマクロ()

Application.ScreenUpdating = False '画面の固定

'変数////////////////////////////////////////////////////

Dim FSO As Object 'ファイルシステムオブジェクト用変数

Set FSO = CreateObject("Scripting.FileSystemObject")

Dim wb As Workbook: Set wb = ThisWorkbook 'このbook用変数

Dim i, j 'カウンター変数

Dim ws As Worksheet 'Sheet用カウンター変数

Dim r_wb As Workbook '読込データ用book変数

Dim r_path As String: r_path = wb.Path & "¥" & "読込データ格納用フォルダ" '読込データ格納用フォルダパス用変数

Dim out_path As String: out_path = wb.Path & "¥" & "作成book格納用フォルダ" '作成book格納用フォルダパス用変数

Dim n_file As String: n_file = Dir(r_path & "¥*")

Dim r_ary '読込データ用配列

Dim out_sheetname As String 'book変換するSheet名用変数

Dim out_wb As Workbook '変換したbook用変数

'ファイルを開く→Sheetをコピー///////////////////////////////////////////////

Do While n_file <> ""
                
    Set r_wb = Workbooks.Open(r_path & "¥" & n_file) 'ファイルを開く
    
    For Each ws In r_wb.Sheets
    
        ws.Copy After:=wb.Sheets(wb.Sheets.Count)
    
    Next
    
    Application.DisplayAlerts = False '警告表示の非表示設定
    
    r_wb.Close 'データを閉じる
    
    Application.DisplayAlerts = True '警告表示の表示設定
    
    
    n_file = Dir() '次のファイル名を取得

Loop

'配列に代入→book作成book名はSheet→貼付け////////////////
Application.DisplayAlerts = False '警告表示の非表示設定

For Each ws In wb.Sheets 'シートのループ処理
    
    If ws.Name <> "メイン" Then 'メインSheet以外の時
    
        out_sheetname = ws.Name 'sheet名をout_sheetnameに代入
        
        Set out_wb = Workbooks.Add '新規book作成
            
        ws.Copy before:=out_wb.Sheets(1)  'Sheetをコピー
            
        out_wb.SaveAs out_path & "¥" & out_sheetname '作成book格納用フォルダにSheet名をbook名にして名前付き保存
        
        out_wb.Close '作成したbookを閉じる
    
    End If

Next
    
Application.DisplayAlerts = True '警告表示の表示設定
    
Application.ScreenUpdating = True '画面の固定解除
 
MsgBox "変換完了"

End Sub

※うまく動かない場合はコメントでください

コメント

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