Excelを使っていると、同じ形式のデータが複数のシートに存在するケースがあります。たとえば「データA」「データB」「データC」といったシートに同じ列構成でデータが記録されており、それらを「集計」シートにまとめて管理したいといった場面です。
この記事では、複数シートの表形式データを1つのシートに一括で集約するVBAコードをご紹介いたします。
目次
使用するVBAコード
Sub CollectSheetData()
    Dim summarySheet As Worksheet
    Dim targetSheet As Worksheet
    Dim baseRange As Range
    Dim copyRange As Range
    Dim lastRow As Long
    Set summarySheet = Worksheets("Summary")
    Set baseRange = summarySheet.Range("A1").CurrentRegion
    For Each targetSheet In Worksheets
        If targetSheet.Name <> summarySheet.Name Then
            Set copyRange = targetSheet.Range("A1").CurrentRegion
            Set copyRange = copyRange.Resize(copyRange.Rows.Count - 1).Offset(1)
            lastRow = summarySheet.Cells(summarySheet.Rows.Count, 1).End(xlUp).Row + 1
            summarySheet.Cells(lastRow, 1).Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value
        End If
    Next
End Sub
コードのポイント
- summarySheet:集約先のシート(ここでは「Summary」)を指定します。
- targetSheet:処理対象となる各ワークシートをループします。
- CurrentRegion:表形式のセル範囲全体を自動で認識します。
- Offset(1)と- Resize(-1):見出し行を除いたデータのみをコピーします。
- lastRow:集約先シートの次の空行を自動判定し、データを順次追記します。
注意点
- すべてのデータシートが同じ列構成である必要があります。
- summarySheetには見出し行が既に存在している前提です。
- 途中に空白行があるとCurrentRegionの判定が意図しない結果になる可能性があるため、整形された表データを前提としてください。
まとめ
本記事では、VBAを活用して複数のExcelシートに点在するデータを1つに集計する方法をご紹介いたしました。
データ収集の自動化は、手作業の工数削減だけでなく、転記ミスの防止にもつながります。
日々の集計作業にVBAを取り入れたい方は、ぜひお試しください。

 
			 
			 
			 
			 
			 
			 
			