ピボットの自動更新
ピボットテーブルは便利ですが「元データを更新したらピボットも自動で更新したい」という場面が多いです。初心者でも安心して使えるように、最短コードからイベント連動、複数ピボット対応までテンプレをまとめました。
基本:ピボットテーブルを更新する最短コード
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 イベントに組み込む
- 安全運用: 元データはテーブル化しておく
