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

VBA
スポンサーリンク

ここでは 複数ブックにまたがって条件付きでピボットテーブルを複数種類同時に更新・再計算する 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 を呼び出すだけで再計算される

練習課題

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

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

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