ここでは 複数ブックにまたがって条件付きでピボットテーブルを更新・再計算する VBAの例を紹介します。ポイントは「開いている複数のブックをループし、条件に合致するピボットテーブルを見つけて .PivotTables("名前").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以上なら、そのシートのピボットテーブルを更新します。
ポイント
- ピボット更新 →
pt.PivotCache.Refresh - 複数ブックをループ →
For Each wb In Application.Workbooks - 条件判定 → シート名やセルの値を使って柔軟に設定
- 特定のピボットだけ更新 →
ws.PivotTables("Pivot名").PivotCache.Refresh
練習課題
- 全ブックの「Sheet2」にあるピボットテーブルを更新するコードを書いてみる
- 各シートのC1セルが「Refresh」と書かれていたら更新するコードを作る
- 複数条件を組み合わせて「シート名がReportで始まり、A1セルが空でないなら更新」にするコードを作る
こうした仕組みを作ると、複数ブックにまたがって条件付きでピボットテーブルを更新・再計算する自動化ツールが完成します。


