
SQL クエリを実行し、それを Excel 2010 スプレッドシートにダンプし、データに基づいて 2 つのピボット テーブルを更新する VBA コードがあります。また、ピボット テーブルに基づいて 2 つのピボット グラフがあり、テーブルが更新されるたびにグラフの書式設定が失われます。
私は指示に従いました本書のセクション12.3これは、私の書式設定の好みに基づいてカスタムチャートタイプを作成し、その書式を維持したいチャートに適用することを提案しました。これらの手順は非常にうまく機能しますもしデータを手動で変更し、ピボット テーブルを手動で更新すると、チャートは適切にフォーマットされたままになります。ただし、次のコードを実行すると:
For Each pt In NewSheet.PivotTables
pt.RefreshTable
Next
書式設定はすぐに失われます。
以前のデータは次のようになります。
そして私が慎重に作成した円グラフ:
データを更新してテーブルを更新するとすぐに次のようになります。
私が得たものは次のとおりです:
繰り返しになりますが、カスタム グラフ スタイルを適用すると、手動で実行した場合には書式設定が維持されますが、VBA コードを実行すると、何らかの理由でカスタム グラフ タイプがリセットされます。
答え1
ピボット グラフを使用せずにこれを実現するには、動的な名前付き範囲と単純な (大まかにフォーマットされた) グラフだけが必要です。
1) 次の数式を使用して定義済みの名前を作成します: Series_A=OFFSET(Sheet!B1,0,0,COUNT(A:A),1)
、ここで - Sheet1!B1 はピボット テーブルの最初のカウント セルを参照します (または、OFFSET に慣れている場合は他の参照) - Count(A:A) は行ラベルのある列です
2) series=Series_A (および必要なその他の項目) を使用してチャートを作成します。
ピボット テーブルを更新すると、定義された名前は行ラベル列の拡張/縮小値を参照し、カウント列の値のみを返します。0、#N/A、またはヘルパー列は必要ありません。