2016年02月11日

複数のピボットテーブルでグループ化の連動を解除してみた(キャッシュを共有しない) / ピボットテーブル / Excel

1つのデータソースから複数のピボットテーブルを作成していて、1つのピボットテーブルで例えば日付をグループ化すると、他のピボットテーブルでも同じように日付がグループ化されてしまいます。

どーしたらいいのでしょうか!?

まずは、連動している実例から、、、

こんな、データソースがあります。“データベース”という名前のテーブルに設定してあります。
20160211_01.JPG

ピボットテーブルを作って“受注日”と“金額”の合計を集計します。
20160211_02.JPG

フィールドリストはこんな感じです。
20160211_03.JPG

“受注日”をグループ化してみます。
20160211_04.JPG

「年」「月」を指定します。
20160211_05.JPG

すると、このように月毎の集計ができました。
20160211_06.JPG

次に、年毎の集計用のピボットテーブルを新たに作ってみました。
行ラベルに“受注日”を設定すると、既に月毎になってしまっています。
20160211_07.JPG

“受注日”を年毎にグループ化します。
20160211_09.JPG

すると、年毎の集計が出来ました。
20160211_10.JPG

すると、さっき作った月毎に集計したピボットテーブルも年毎に変わってしまいました。
20160211_11.JPG
これが、グループ化の連動です。

では、なんでこーなるの!?っていうと、、、
同じデータソースから複数のピボットテーブルを作ると、パソコンのキャッシュメモリ(良く使用するデータを保存する高速メモリ)を節約する為に共有化をします。
なので、その結果クループ化等が共有されて連動してしまうわけです。

では、どうやって連動を解除するかと言うと。。。
一旦出来上がってしまったピボットテーブルの連動は残念ながら解除できません!

ので、新たにキャッシュを共有しない独立したピボットテーブルを作るわけです。
但し、通常の作り方ではなく「ピボットテーブルウィザード」を使って作ります。
では、さっそく

ピボットテーブルウィザードを使ってキャッシュを共有しない独立したピボットテーブルを作成する

データソース上にカーソルを置いて、「Alt」+「D」を押します。
すると、こんなメッセージが表示されます。ちなみにこれはExcel2007です。
20160211_12.JPG

ここで「P」を押します。
すると「ピボットテーブルウィザード」が起動します。
ショートカットキーではなく、「クイックアクセスツールバー」にアイコンを追加することも出来ます。
20160211_13.JPG

「次へ」を押します。
データソースの範囲を指定します。
ここでは範囲指定ではなくテーブル名を入力します。
20160211_14.JPG

するとこんなメッセージが表示されます。ここが肝です!
「同じ元データから作成された既存のレポート***を基にする場合、新しいレポートではメモリを節約できます。既存のレポートと同じデータを基にして新しいレポートを作成しますか?
[はい]をクリックすると、メモリを節約し、ブックのサイズを小さくできます。
[いいえ]をクリックすると、独立した2つのレポートが作成されます」
・・・なるほど。。。
で、[いいえ]をクリックします。
20160211_15.JPG

ピボットテーブルの作成場所を指定して「完了」します。
20160211_16.JPG

すると、新しい独立したピボットテーブルが出来ました。
20160211_17.JPG

受注日と金額の集計をします。
20160211_18.JPG

受注日を年毎にグループ化します
20160211_19.JPG

と年毎に集計できました。
20160211_20.JPG

で、最初に作って年毎に連動してしまったピボットテーブルの受注日のグループ化を変更してしみます。
20160211_21.JPG

月毎にしてみます。
20160211_22.JPG

月毎の集計になりました。
20160211_23.JPG図23

で、独立して作ったピボットテーブルを見てみると、ちゃんと年毎になってます。
20160211_24.JPG

めでたし、めでたし!!


関連ページ
日毎のデータを年月で集計してみた


posted by haku1569 at 18:15| Excel ピボットテーブル | このブログの読者になる | 更新情報をチェックする
' + adSrc + '<' + '/body>'); d.close(); } loadAd(); window.setTimeout(loadAd, reloadSec * 1000); window.setTimeout(function() {adDiv.style.display = 'none'}, hideSec * 1000); }); }