Excel VBA | 複数ブックにまたがって条件付きでピボットテーブルを更新・再計算する

Excel VBA VBA
スポンサーリンク

ここでは 複数ブックにまたがって条件付きでピボットテーブルを更新・再計算する 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

練習課題

  1. 全ブックの「Sheet2」にあるピボットテーブルを更新するコードを書いてみる
  2. 各シートのC1セルが「Refresh」と書かれていたら更新するコードを作る
  3. 複数条件を組み合わせて「シート名がReportで始まり、A1セルが空でないなら更新」にするコードを作る

こうした仕組みを作ると、複数ブックにまたがって条件付きでピボットテーブルを更新・再計算する自動化ツールが完成します。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました