※本ページにはプロモーション(広告)が含まれています
Excelのピボットテーブルが内部に持つ集計用キャッシュデータ。元データのスナップショットを保持して高速集計を実現する一方、ファイルサイズ肥大化や破損による更新不可の原因にもなる。
詳しい解説
PivotCache(ピボットキャッシュ)とは、Excelのピボットテーブル機能が高速な集計・並べ替え・フィルタリングを実現するために、元データの完全なスナップショットをワークブック内部に保持する仕組みです。ピボットテーブルを作成した瞬間に自動生成され、ユーザーの目には直接見えませんが、ファイル容量・更新挙動・破損トラブルなど多くの場面で影響を及ぼします。
## 仕組みと内部構造
ピボットテーブルは「データ範囲を直接読んで集計している」と思われがちですが、実際にはPivotCacheに格納されたコピーを参照しています。元データが100万行ある場合、PivotCacheにも100万行分の圧縮されたコピーが保持され、ピボットテーブルのドラッグ操作・フィルター変更・集計関数切り替えはこのキャッシュに対して行われます。これにより、元データを毎回スキャンするより数十倍高速な応答が実現されます。
PivotCacheの実体は、Excel 2007以降の.xlsx/.xlsmファイル内のXMLパーツ(xl/pivotCache/pivotCacheDefinitionN.xml と pivotCacheRecordsN.xml)として保存されます。ファイル拡張子をzipに変えて中身を確認すると、各ピボットテーブルに紐づくキャッシュが個別に格納されているのが確認できます。
## 複数ピボットの共有元としての役割
同じ元データから複数のピボットテーブルを作成する場合、デフォルトではPivotCacheが共有されます。ピボット1とピボット2が同じデータソースを指している場合、内部的には1つのPivotCacheを2つのピボットが参照する構造になります。これによりファイルサイズが2倍にならず、更新操作も1回で全ピボットに反映されます。
ただし、ピボットを「コピー&ペースト」ではなく「新規作成ウィザード」で同じ範囲から作り直すと、別のPivotCacheが生成されてしまうことがあります。意図せずキャッシュが複数生成されるとファイルサイズが膨れ上がるため、複数ピボットを使う場合は最初の1つをコピーして使い回すのが鉄則です。
## ファイルサイズ肥大化の主要因
「Excelファイルが何十MBにも膨れ上がる」「開くのに何分もかかる」という症状の多くは、PivotCacheが原因です。元データが10万行ある場合、PivotCacheにもほぼ同量のデータが保存され、複数のピボットでキャッシュを共有していない場合は元データの数倍の容量を消費します。
ファイルサイズ削減のテクニックとして「ファイルを開くときにデータを更新する」「ファイルを保存するときにソースデータを保存しない」というオプションが用意されています。ピボットテーブル オプション > データタブで設定でき、後者を有効にするとPivotCacheが保存されず、開くたびに元データから再生成されるためファイルサイズが劇的に縮小します。
## 外部データソース連携
PivotCacheは内部データ(同一ワークブックの表)だけでなく、外部データソースとも連携できます。SQL Server・Access・OLAP Cube・OData・CSVなどから取得したデータをキャッシュとして保持し、ネットワーク接続が切れていてもオフラインで集計操作が可能です。
この場合のPivotCacheは「データの中間バッファ」として機能し、ユーザーが「すべて更新」を実行したタイミングで外部ソースに再接続してキャッシュを再生成します。Power Pivotで作成したデータモデルもPivotCacheの一種として扱われます。
## 破損時の症状と修復方法
PivotCacheが破損すると、以下の典型的な症状が発生します。①「データソースの参照が正しくありません」エラーで更新できない、②ピボットテーブルが空白になりフィールドリストも表示されない、③Excelがピボット操作のたびにフリーズする、④ファイルが開けない、⑤更新するとプログラムが応答停止する。
修復方法としては、①ピボットテーブル オプション > データタブで「すべて更新」を試す、②ピボット範囲を新しいセルに「コピー&値貼り付け」してから再構築、③「ピボットテーブルとピボットグラフのオプション」でキャッシュ更新(Ctrl+Alt+F5)、④xlsxをzip展開して破損したpivotCacheRecordsN.xmlを削除し再生成、⑤VBAで全PivotCacheを破棄して再構築する手法があります。
## VBAでの操作(PivotCache.Refresh)
VBAではActiveWorkbook.PivotCachesコレクションを通じて全てのPivotCacheにアクセスできます。代表的な操作は以下の通りです。
“`vba
' 全PivotCacheを更新
Dim pc As PivotCache
For Each pc In ActiveWorkbook.PivotCaches
pc.Refresh
Next pc
' 特定ピボットのキャッシュ更新
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
' 不要なキャッシュを削除(孤立PivotCache対策)
ActiveWorkbook.PivotCaches(1).MissingItemsLimit = xlMissingItemsNone
“`
大規模ファイルの自動化処理では、不要になったPivotCacheを明示的に削除することでメモリリーク・ファイル膨張を防げます。
## Power Pivotとの違い
Excel 2013以降に搭載されたPower Pivotは、PivotCacheの拡張版である「データモデル」を使用します。従来のPivotCacheは1ピボット=1テーブルが原則ですが、Power Pivotのデータモデルは複数テーブルをリレーションシップで結合し、DAX式による高度な集計、列指向圧縮による軽量化、1億行を超える大規模データへの対応が可能です。
つまり、PivotCacheは「単一テーブルのスナップショット」、Power Pivotのデータモデルは「リレーショナルなインメモリBI」と整理できます。Excelでビッグデータを扱う場合はPower Pivotへの移行が推奨されます。
## ベストプラクティス
①同じソースから複数ピボットを作る場合は1つ目をコピーしてキャッシュ共有、②大規模ファイルは「ソースデータを保存しない」オプションを有効化、③定期的な「全て更新」とファイル再保存でキャッシュ整合性を維持、④破損リスク回避のため重要ファイルは別名保存でバックアップ、⑤1億行を超える場合はPower Pivot+データモデルへ移行。これらを守ることでPivotCache起因のトラブルは大幅に削減できます。
営業日報30万行のExcelファイルを開くと120MBあり起動に3分かかっていた事例で、ピボットテーブル オプション > データタブの「ソースデータをファイルに保存」のチェックを外してから保存し直したところ、ファイルサイズが18MBまで縮小し起動も10秒以内に短縮されました。これはPivotCacheがファイルに含まれなくなり、開くたびに元データから自動再生成される設定になったためです。ただしこの設定では開くたびに「更新」が走るので、外部データソース参照の場合はネットワーク接続環境が必須になる点に注意が必要です。
別の呼び方
ピボットキャッシュ
ピボットテーブルキャッシュ
Pivot Cache
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!