Excel VBA 逆引き集 | ピボットの自動更新

Excel VBA
スポンサーリンク

ピボットの自動更新

ピボットテーブルは便利ですが「元データを更新したらピボットも自動で更新したい」という場面が多いです。初心者でも安心して使えるように、最短コードからイベント連動、複数ピボット対応までテンプレをまとめました。


基本:ピボットテーブルを更新する最短コード

Sub RefreshPivot()
    Worksheets("ピボット").PivotTables("PivotTable1").PivotCache.Refresh
End Sub
VB
  • ポイント
    • "ピボット" はピボットテーブルがあるシート名。
    • "PivotTable1" はピボットテーブルの名前(右クリック→オプションで確認)。
    • PivotCache.Refresh で元データを読み直し、集計結果を更新。

複数ピボットを一括更新

Sub RefreshAllPivots()
    Dim pt As PivotTable, ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        For Each pt In ws.PivotTables
            pt.PivotCache.Refresh
        Next pt
    Next ws
End Sub
VB
  • ポイント
    • 全シートの全ピボットを一括更新。
    • 「複数シートにピボットが散らばっている」場合に便利。

元データ更新後に自動でピボット更新(イベント連動)

例:データシートに値を貼り付けたら自動更新

Private Sub Worksheet_Change(ByVal Target As Range)
    'このコードは「データ」シートのコードウィンドウに書く
    Call RefreshAllPivots
End Sub
VB
  • ポイント
    • 「データ」シートに変更があると自動で全ピボット更新。
    • 大量データでは頻繁に走ると重いので注意。

ブックを開いたときに自動更新

Private Sub Workbook_Open()
    Call RefreshAllPivots
End Sub
VB
  • ポイント
    • このコードは「ThisWorkbook」モジュールに書く。
    • ブックを開いた瞬間に全ピボットが最新化される。

データ範囲をテーブル化しておくと安心

  • ピボットの元データを テーブル(ListObject) にしておくと、行数が増えても自動で範囲が広がる。
  • VBAで更新する際も範囲指定を気にせず済む。

例題で練習

例題1:売上データを更新したらピボットも更新

Sub Example_RefreshSalesPivot()
    Worksheets("売上ピボット").PivotTables("売上集計").PivotCache.Refresh
End Sub
VB

例題2:複数部署別ピボットを一括更新

Sub Example_RefreshDeptPivots()
    Call RefreshAllPivots
End Sub
VB

例題3:ブックを開いたら自動で最新化

Private Sub Workbook_Open()
    Call RefreshAllPivots
End Sub
VB

よくある落とし穴と対策

  • ピボット名が違ってエラー
    → ピボットテーブルの名前を確認して正しく指定する。
  • 元データ範囲が固定で新しい行が反映されない
    → 元データをテーブル化しておくと自動で範囲が広がる。
  • イベント連動で重くなる
    → Worksheet_Change は大量データだと頻繁に走るので、必要に応じてボタン更新に切り替える。
  • 複数ピボットでキャッシュ共有
    → 同じデータを元にしたピボットはキャッシュを共有するため、1つ更新すれば他も更新される。

まとめ

  • 単体更新: PivotCache.Refresh
  • 全体更新: ループで全ピボットを更新
  • 自動更新: Worksheet_Change や Workbook_Open イベントに組み込む
  • 安全運用: 元データはテーブル化しておく
タイトルとURLをコピーしました