【マクロ・VBA コードとファイルダウンロード可】複数のbookを1つにまとめるマクロ

アイキャッチ画像 book間

複数のbookを1つにまとめるマクロを紹介します

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

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

使用方法解説動画↓

仕事でデータ解析をするとき、月毎のデータなどを集めて分析することが多いと思います

月毎にファイルが違う場合、一つ一つ開いてデータを集めて1つのシートにまとめる

この作業が時間かかって、めんどくさいんでよね

あとミスも増えます

そこで複数のbookを1つにまとめるマクロを作りました

これにより簡単にデータを集め分析が早くできます

仕事で利用して、1分でも早く退社しましょ!

目指せ!定時あがり!

ダウンロードファイル

ファイルです→複数のbookデータを1つにまとめるマクロ.xlsm

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

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

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

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

マクロの許可の画像

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

マクロの許可の画像

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

マクロの許可の画像

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

マクロの許可の画像

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

マクロの許可の画像

マクロコード

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

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

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

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

集計したいデータの格納フォルダ作成 マクロ

Option Explicit

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

集計データの初期化 マクロ

Option Explicit

Sub 集計データ初期化()

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

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

'初期化////////////////////////////////////////////////
ws_集計データ.Cells.Delete

End Sub

データ集計 マクロ

Option Explicit

Sub データ集計()
'変数////////////////////////////////////////////////////
Dim wb As Workbook: Set wb = ThisWorkbook 'このbook用変数

Dim d_wb As Workbook '集計するデータ用book

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

Dim ary_d 'データ配列用変数

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

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

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

Dim last_r '最終行用変数

Dim yesnocancel As String 'msgbox用変数

'ファイルを開く→配列に代入→集計データSheetに貼付け→配列初期化////////////////

yesnocancel = MsgBox("すべてのデータの先頭行は入れますか?", vbYesNoCancel) '「はい」先頭行を含めない「いいえ」先頭行を含める「キャンセル」マクロの起動を止める

If yesnocancel = 2 Then
    Exit Sub
End If

Do While n_file <> ""
                
    Set d_wb = Workbooks.Open(f_path & "¥" & n_file) 'ファイルを開く
    
    ary_d = d_wb.Sheets(1).Range("A1").CurrentRegion 'データを配列化
    
    Application.DisplayAlerts = False '警告表示の非表示設定
    
    d_wb.Close 'データを閉じる
    
    Application.DisplayAlerts = True '警告表示の表示設定
    
    last_r = ws_集計データ.Cells(Rows.Count, 1).End(xlUp).Row
    
    'データ貼付け---------------------------------------------
    If yesnocancel = 6 Then 'はいの時
        
        For i = 1 To UBound(ary_d, 1)
            
            For j = 1 To UBound(ary_d, 2)
            
            ws_集計データ.Cells(last_r + i, j) = ary_d(i, j)
            
            Next j
        
        Next i
        
    ElseIf yesnocancel = 7 Then 'いいえの時
        
        If c = 0 Then '最初だけ先頭行を含める
            
            c = 1
            
            For i = 1 To UBound(ary_d, 1)
            
                For j = 1 To UBound(ary_d, 2)
                
                    ws_集計データ.Cells(last_r + i, j) = ary_d(i, j)
                
                Next j
        
            Next i
        
        ElseIf c = 1 Then '次項は含めずにデータを集計する
        
            For i = 2 To UBound(ary_d, 1)
            
            last_r = ws_集計データ.Cells(Rows.Count, 1).End(xlUp).Row + 1
            
                For j = 1 To UBound(ary_d, 2)
                    
                    ws_集計データ.Cells(last_r, j) = ary_d(i, j)
                    
                Next j
                
            Next i
        
        End If
        
    End If
    '-----------------------------------------------------------
    n_file = Dir() '次のファイル名を取得

Loop

ws_集計データ.Rows(1).Delete '空白の先頭行を削除

ws_集計データ.Activate

MsgBox "集計完了"

End Sub

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

コメント

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