「はぁ……また今日も、この10個のピボットテーブルのフィルターを『先月分』に切り替える作業から始まるのか……。クリック、カチカチ。選択、カチカチ。本当に面倒くさいな…。」
そんなふうに感じたことはありませんか?
私も急いで操作するあまり、フィルターを一つ掛け忘れていたことがあります。そんな時に大活躍するのが、「VBAによるピボットテーブルの自動操作」になります。
VBAで実現できる2つの操作
私たちが自動化したい作業は、大きく分けて以下の2つだけになります。
- フィルターの変更: 特定のデータだけを抽出して表示させます。
- レイアウトの変更: 表の形式を整えて、見やすく配置します。
【コピペOK】フィルターとレイアウトを一括変更するコード
さっそく、実務でそのまま使えるコードをご紹介します。
このコードは、「売上データ」という名前のピボットテーブルのフィルターを「東京支店」に変更し、さらに見やすい「表形式」へと一瞬で整えるものになります。
Sub UpdatePivotTable()
' --- 変数の準備 ---
Dim pt As PivotTable
' シート名を「売上報告」に、ピボットテーブル名を「売上データ」に指定
' ※自分のシート名やテーブル名に合わせて書き換えてください
On Error Resume Next ' エラーが起きても止まらないようにする
Set pt = ThisWorkbook.Worksheets("売上報告").PivotTables("売上データ")
On Error GoTo 0
If pt Is Nothing Then
MsgBox "ピボットテーブルが見つかりません!名前を確認してください。"
Exit Sub
End If
' --- 1. フィルター(ページフィールド)の変更 ---
' 「支店名」という項目のフィルターを「東京支店」に固定します
With pt.PivotFields("支店名")
.ClearAllFilters ' まずはフィルターを全部リセット
.CurrentPage = "東京支店" ' 特定の項目を選択
End With
' --- 2. レイアウトの変更 ---
' 表の見た目を「表形式」に変更
pt.RowAxisLayout xlTabular
' 行の総計を表示しない
pt.ColumnGrand = False
' 最後にデータを最新の状態に更新
pt.RefreshTable
MsgBox "ピボットテーブルの更新が完了しました!"
End Sub

押さえておきたいコードのポイント
- .CurrentPage:これがフィルターの選択肢を決める重要なプロパティです。ここに「2026年3月」などと指定するだけで、一瞬で表示が切り替わります。
- xlTabular: ピボットテーブル特有の「あの、ちょっと見づらい階段状の表示」を、一般的なスッキリとした表形式に変更してくれる便利な設定になります。
【失敗談】動かない原因は「名前」にある?
実は私、初めてこのコードを書いた時、全く動きませんでした。
「コードは正しいはずなのに、なぜ??」と半日悩んだ結果……原因は、ピボットテーブルの「名前」が「ピボットテーブル1」ではなく、半角英字で「PivotTable1」になっていたという非常に単純なミスでした。
VBAはオブジェクトの名前(表記ミス)に対してとても厳格です。皆さんが実行される際は、Excelの「ピボットテーブル分析」タブの左端にある「ピボットテーブル名」を事前にご確認いただくのが確実です。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント