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を取り入れたい方は、ぜひお試しください。