ここでは 複数ブックにまたがって条件付きでデータを集計(SUMやAVERAGEでまとめる) VBAの例を紹介します。ポイントは「複数のブックをループし、条件に合致するシートやセルの値を集計して、統合シートに結果をまとめる」ことです。
基本例:各ブックの「Data」シートのB列を合計
Sub 複数ブックで合計集計()
Dim wb As Workbook
Dim ws As Worksheet
Dim destWs As Worksheet
Dim lastRow As Long
Dim totalSum As Double
' 統合先シートを指定(このブックの「Master」シート)
Set destWs = ThisWorkbook.Sheets("Master")
totalSum = 0
For Each wb In Application.Workbooks
If wb.Name <> ThisWorkbook.Name Then
For Each ws In wb.Worksheets
' 条件:シート名が「Data」
If ws.Name = "Data" Then
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
totalSum = totalSum + Application.WorksheetFunction.Sum(ws.Range("B2:B" & lastRow))
End If
Next ws
End If
Next wb
' 結果を統合シートに出力
destWs.Range("A1").Value = "合計"
destWs.Range("B1").Value = totalSum
End Sub
VB👉 開いているすべてのブックの「Data」シートからB列の合計を取り、Masterシートにまとめます。
応用例1:平均値を集計
Sub 複数ブックで平均集計()
Dim wb As Workbook
Dim ws As Worksheet
Dim destWs As Worksheet
Dim lastRow As Long
Dim totalSum As Double
Dim totalCount As Long
Set destWs = ThisWorkbook.Sheets("Master")
totalSum = 0
totalCount = 0
For Each wb In Application.Workbooks
If wb.Name <> ThisWorkbook.Name Then
For Each ws In wb.Worksheets
' 条件:シート名が「Report」で始まる
If Left(ws.Name, 6) = "Report" Then
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
totalSum = totalSum + Application.WorksheetFunction.Sum(ws.Range("C2:C" & lastRow))
totalCount = totalCount + Application.WorksheetFunction.Count(ws.Range("C2:C" & lastRow))
End If
Next ws
End If
Next wb
' 結果を統合シートに出力
destWs.Range("A2").Value = "平均"
If totalCount > 0 Then
destWs.Range("B2").Value = totalSum / totalCount
Else
destWs.Range("B2").Value = "データなし"
End If
End Sub
VB👉 「Report」で始まるシートのC列を対象に、複数ブックにまたがって平均値を計算します。
応用例2:複数条件を組み合わせて集計
Sub 複数条件で集計()
Dim wb As Workbook
Dim ws As Worksheet
Dim destWs As Worksheet
Dim lastRow As Long
Dim totalSum As Double
Set destWs = ThisWorkbook.Sheets("Master")
totalSum = 0
For Each wb In Application.Workbooks
If wb.Name <> ThisWorkbook.Name Then
For Each ws In wb.Worksheets
' 条件1: シート名が「Sales」で始まる
' 条件2: A1セルが「集計」と書かれている
If Left(ws.Name, 5) = "Sales" And ws.Range("A1").Value = "集計" Then
lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
totalSum = totalSum + Application.WorksheetFunction.Sum(ws.Range("D2:D" & lastRow))
End If
Next ws
End If
Next wb
destWs.Range("A3").Value = "条件付き合計"
destWs.Range("B3").Value = totalSum
End Sub
VB👉 「Sales」で始まるシートかつA1セルが「集計」と書かれている場合のみ、D列の合計を統合します。
ポイント
- 合計 →
Application.WorksheetFunction.Sum - 平均 → 合計 ÷ 件数(
Countを利用) - 複数ブックをループ →
For Each wb In Application.Workbooks - 条件判定 → シート名やセルの値を使って柔軟に設定
- 結果を統合シートに出力 →
destWs.Range("B1").Value = totalSum
練習課題
- 全ブックの「Sheet2」のB列を合計してMasterシートにまとめるコードを書いてみる
- 各シートのC1セルが「Average」と書かれていたら、その列の平均を統合するコードを作る
- 複数条件を組み合わせて「シート名がReportで始まり、A1セルが空でないならSUM、空ならAVERAGE」を計算するコードを作る
こうした仕組みを作ると、複数ブックにまたがって条件付きでデータを集計(SUMやAVERAGEでまとめる)自動化ツールが完成します。

