Excelで複数のシートを1つにまとめる作業は手動では大変ですが、VBAを使えば効率よく行えます。本記事では、VBAを用いて1行目が同じデータを持つシートを縦に繋げ、各シートごとにまとめる方法を解説します。
1. VBAを使ったデータの集約方法
まず、ExcelにVBAマクロを組み込み、指定された複数のシートのデータを集めて1つのシートにまとめます。以下のVBAコードを使用して、指定の条件に従ってシートを集約できます。
Sub ConsolidateSheets()
Dim ws As Worksheet, newWs As Worksheet
Dim lastRow As Long, pasteRow As Long
Set newWs = ThisWorkbook.Sheets.Add '新しいシートを作成
newWs.Name = "ConsolidatedData"
pasteRow = 1
For Each ws In ThisWorkbook.Sheets
If ws.Name <> newWs.Name Then
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ws.Rows(1 & ":" & lastRow).Copy
newWs.Cells(pasteRow, 1).PasteSpecial Paste:=xlPasteValues
pasteRow = newWs.Cells(newWs.Rows.Count, 1).End(xlUp).Row + 1
End If
Next ws
End Sub
このコードは、指定されたシートのデータを1つのシートに縦に繋げていきます。シートごとにデータをまとめてコピーし、新しいシートに貼り付けます。
2. シートのデータを条件で絞り込む方法
もし、特定の条件(例えば1行目の数値や文字列が一致するシート)のみをまとめたい場合、その条件に基づいてシートをフィルタリングすることが可能です。以下のコードでは、1行目が特定の値を持つシートのみを集める方法を紹介します。
Sub FilterAndConsolidateSheets()
Dim ws As Worksheet, newWs As Worksheet
Dim lastRow As Long, pasteRow As Long
Set newWs = ThisWorkbook.Sheets.Add
newWs.Name = "FilteredData"
pasteRow = 1
For Each ws In ThisWorkbook.Sheets
If ws.Name <> newWs.Name Then
If ws.Cells(1, 1).Value = "TargetValue" Then '指定された条件でフィルタ
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ws.Rows(1 & ":" & lastRow).Copy
newWs.Cells(pasteRow, 1).PasteSpecial Paste:=xlPasteValues
pasteRow = newWs.Cells(newWs.Rows.Count, 1).End(xlUp).Row + 1
End If
End If
Next ws
End Sub
このコードを使えば、指定された値が1行目に存在するシートのみを選択してデータをまとめることができます。
3. データを異なるシートに分けて保存する方法
集約したデータをさらに、シートごとに異なるシートに分けて保存したい場合、以下のようにコードを変更することができます。この方法では、各シートごとにデータを分けて新しいExcelファイルに保存できます。
Sub SaveDataToDifferentSheets()
Dim ws As Worksheet, newWs As Worksheet
Dim lastRow As Long, pasteRow As Long
Dim newBook As Workbook
Set newBook = Workbooks.Add '新しいExcelファイルを作成
For Each ws In ThisWorkbook.Sheets
If ws.Name <> "SheetToIgnore" Then '不要なシートはスキップ
Set newWs = newBook.Sheets.Add
newWs.Name = ws.Name
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ws.Rows(1 & ":" & lastRow).Copy
newWs.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
End If
Next ws
newBook.SaveAs "C:\path\to\save\newFile.xlsx" '保存先指定
newBook.Close
End Sub
この方法では、元のシートごとにデータを分けて新しいExcelファイルとして保存できます。
4. まとめ
Excel VBAを使用して複数シートのデータを効率よく集約する方法を紹介しました。コードを少し変更することで、様々なニーズに応じたデータの集約や保存が可能です。VBAの力を活用して作業を自動化し、時間を節約しましょう。


コメント