【VBA】複数のシート上の表を1つのシートに纏める

VBAで
 ・複数のシート上の表を
 ・1つのシートに纏める方法
を紹介します!

各シート上の表に見出し行があっても、
上手いこと1つのシートに纏めます!

PR

VBAコード

ここでは例として、
 ・複数のシート「data_*」上にあるセル「B2」から始まる表を
 ・1つのシートに纏める方法
を紹介します。

シート「data_01」
シート「data_01
シート「data_02」
シート「data_02
シート「data_03」
シート「data_03

上記の全てのシート上の表には「見出し行」があります。

Option Explicit

Sub main()
    
    Dim inputSheetName As String
    Dim outputSheetName As String
    Dim startRange As String
    Dim outputSheet As Worksheet
    Dim sheet As Worksheet
    Dim sheetCount As Long
    Dim outputRow As Long
    Dim outputColumn As Long
    Dim inputRange As Range

    '入力シート名
    inputSheetName = "data_*"
    '出力シート名
    outputSheetName = "merge"
    '表の開始セル
    startRange = "B2"
    
    '既に出力シートが存在する場合は削除
    For Each sheet In ThisWorkbook.Worksheets
        If sheet.Name = outputSheetName Then
            '確認メッセージを非表示
            Application.DisplayAlerts = False
            'シート削除
            Worksheets(outputSheetName).Delete
            '確認メッセージを表示
            Application.DisplayAlerts = True
        End If
    Next
    
    '出力シートを新規作成
    Set outputSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    outputSheet.Name = outputSheetName
    
    '処理したファイル数を示すカウンタ変数
    sheetCount = 0
    '書き出し列
    outputColumn = outputSheet.Range(startRange).Column
    '書き出し行
    outputRow = outputSheet.Range(startRange).Row
    
    'シート数分繰り返し
    For Each sheet In ThisWorkbook.Worksheets
        '入力シートの場合のみ処理を行う
        If sheet.Name Like inputSheetName Then
            'カウンタ変数をカウントアップ
            sheetCount = sheetCount + 1
            '表の範囲を指定
            Set inputRange = sheet.Range(startRange).CurrentRegion
            '1シート目で無い場合は、表の範囲を1行下にずらす(見出し行を除く)
            If sheetCount <> 1 Then
                Set inputRange = inputRange.Offset(1, 0).Resize(inputRange.Rows.Count - 1)
            End If
            '出力シートへ出力(コピペ)
            inputRange.Copy outputSheet.Cells(outputRow, outputColumn)
            '次の書き出し行を取得
            outputRow = outputSheet.Cells(Rows.Count, outputColumn).End(xlUp).Row + 1
        End If
    Next
    
    '出力シートの列幅を自動調整
    outputSheet.Range(startRange).CurrentRegion.Columns.AutoFit

End Sub

以下を指定します。
※状況に応じて任意の値を指定してください。

・入力シート名(16行目)
・出力シート名(18行目)
・表の開始セル(20行目)

1シート目で無い場合は、表の範囲を1行下にずらします(54~56行目)。
※見出し行を除くため。

出力シートへ出力します(58行目)。
※コピペします。

「次の書き出し行」を取得します(60行目)。

「出力シート」の列幅を自動調整します(65行目)。

PR

実行結果

複数のシート上の表を1つのシートに纏めることができました。

実行結果
実行結果
PR

参考①

1つのシートに纏めた表を、CSVファイルとして出力することもできます。

詳細は以下の記事をご確認ください。

PR

参考②

1つのシートに纏めた表を、並び替え(ソート)したほうが良いかもしれません。

並び替える(ソートする)方法は、以下の記事をご確認ください。

PR

参考③

1つのシートに纏めた表から、不要なデータを削除したほうが良いかもしれません。

オートフィルタを使用して不要なデータを削除できます。

詳細は以下の記事をご確認ください。