ここでは 複数ブックにまたがって条件付きでピボットテーブルを複数種類同時に更新・再計算する VBAの例を紹介します。ポイントは「複数ブックをループし、条件に合致するシートを判定して、そのシートにある複数のピボットテーブルを一括で .PivotCache.Refresh する」ことです。
基本例:すべてのブックのすべてのピボットテーブルを更新
Sub 複数ブックで全ピボット更新()
Dim wb As Workbook
Dim ws As Worksheet
Dim pt As PivotTable
For Each wb In Application.Workbooks
If wb.Name <> ThisWorkbook.Name Then
For Each ws In wb.Worksheets
For Each pt In ws.PivotTables
pt.PivotCache.Refresh
Next pt
Next ws
End If
Next wb
End Sub
VB👉 開いているすべてのブックのすべてのピボットテーブルを更新・再計算します。
応用例1:シート名が「Report」で始まる場合だけ複数ピボットを更新
Sub 条件付きで複数ピボット更新()
Dim wb As Workbook
Dim ws As Worksheet
Dim pt As PivotTable
For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
If Left(ws.Name, 6) = "Report" Then
For Each pt In ws.PivotTables
pt.PivotCache.Refresh
Next pt
End If
Next ws
Next wb
End Sub
VB👉 「Report」で始まるシートにある複数のピボットテーブルだけを更新します。
応用例2:セルの値で判定して複数ピボットを更新
Sub セル値で複数ピボット更新()
Dim wb As Workbook
Dim ws As Worksheet
Dim pt As PivotTable
For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
' A1セルが「更新」と書かれていたら、そのシートの複数ピボットを更新
If ws.Range("A1").Value = "更新" Then
For Each pt In ws.PivotTables
pt.PivotCache.Refresh
Next pt
End If
Next ws
Next wb
End Sub
VB👉 各シートのA1セルに「更新」と書かれている場合のみ、そのシートの複数ピボットテーブルを更新します。
応用例3:複数条件を組み合わせて複数ピボットを更新
Sub 複数条件で複数ピボット更新()
Dim wb As Workbook
Dim ws As Worksheet
Dim pt As PivotTable
For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
' 条件1: シート名が「Sales」で始まる
' 条件2: B2セルが100以上
If Left(ws.Name, 5) = "Sales" And ws.Range("B2").Value >= 100 Then
For Each pt In ws.PivotTables
pt.PivotCache.Refresh
Next pt
End If
Next ws
Next wb
End Sub
VB👉 「Sales」で始まるシートかつB2セルが100以上なら、そのシートにある複数のピボットテーブルを更新します。
ポイント
- 複数ピボットを同時更新 →
For Each pt In ws.PivotTablesで一括処理 - 条件判定 → シート名やセルの値を使って柔軟に対象を絞り込み
- 更新処理 →
pt.PivotCache.Refreshを呼び出すだけで再計算される
練習課題
- 全ブックの「Sheet2」にある複数ピボットテーブルを更新するコードを書いてみる
- 各シートのC1セルが「Refresh」と書かれていたら複数ピボットを更新するコードを作る
- 複数条件を組み合わせて「シート名がReportで始まり、A1セルが空でないなら複数ピボットを更新」にするコードを作る
こうした仕組みを作ると、複数ブックにまたがって条件付きでピボットテーブルを複数種類同時に更新・再計算する自動化ツールが完成します。

