2015年04月11日

データソースとピボットテーブルのセットをコピーしてもデータソースは元のまま!?(レポートフィルタページの表示)/Excel/ピボットテーブル

Excelのピボットテーブルでデータソースとピボットテーブルが同じシートに表示されているシートをコピーして新しいシートを作ってもデータソースは元のシートのままになっているのです。
なので、例えば月毎にシートを分けてそれぞれのシートのピボットテーブルで月のデータを集計したい時は、いちいちデータソースを変更していかなければならないのですが、、、
レポートフィルタを設定すれば、あっと言う間に月ごとのシートとピボットテーブルが出来ちゃいます。
20150411_100.jpg

データソースとピボットテーブルをセットでコピーしてもデータソースは元のまま
こんな、3月のデータソースとピボットテーブルが1つのシートに出来ています。
シートの名前も"3月"と編集しています。
20150411_101.JPG

このシートをコピーして各月のシートを作って、4月のデータは4月のシートに入力してピボットテーブルで集計したいと思います。
まず、シートのタブ上で右クリして「移動またはコピー」を選択します。
20150411_102.JPG

「コピーを作成する」にチェックを入れます。
20150411_103.JPG

コピーされたシートの名前を"4月"に編集して、データソースに4月のデータを入力して、ピボットテーブルを「更新」したのですが。。。
何故か、3月の集計結果が表示されているだけで、4月のデータになりません。
20150411_104.JPG

ピボットテーブルのデータソースを確認してみると、、何と!
3月のシートのデータソースになってるじゃないですか!?
20150411_105.JPG

つまり、ピボットテーブルをコピーしてもデータソースは元のままになっているのです。
データソースとピボットテーブルが1つのシートにあろうがなかろうが関係ないのです。

ので、4月のシートのピボットテーブルを4月のシートのデータソースに変更するには、いちいちデータソースの変更をしていかなければならないってことになります。
20150411_106.JPG

そうすれば、4月のシートのピボットテーブルに4月のデータが表示されます。
これを1月から12月までやるのも、ちと手間がかかります。
20150411_107.JPG

レポートフィルタのページ表示で一発作成
そこで、どうするかというと。。。
まず、月が異なるデータも日付順に1つのデータソースにどんどん入力していきます。
20150411_108.JPG

そこで、別のシートのピボットテーブルを作ります。
20150411_109.JPG

月毎に集計しなければならないので、日付をグループ化します。
日付の上にカーソルを置いて、「ピボットテーブルツール」、「オプション」、「グループ」から「グループフィールド」を選択します。
20150411_110.JPG

"日"と"月"を選択します。
20150411_111.JPG

フィールドリストに"月"が追加されました。
「レポートフィルタ」に"月"を追加します。
20150411_112.JPG

するとこのような一番上にレポートフィルタが追加されたピボットテーブルになりました。
20150411_113.JPG

レポートフィルタの▼ボタンを押して"3月"を選択してみると、、
20150411_114.JPG

3月のデータのみが集計されました。
20150411_115.JPG

さて、このピボットテーブルを月毎のシートに展開していきます。
「ピボットテーブルツール」、「オプション」、「オプション」から「レポートフィルタページの表示」を選択します。
20150411_116.JPG

レポートフィルタに"月"しか設定していないため、選択の余地はないのでこのまま「OK」します。
20150411_117.JPG

すると、あら不思議!各月のシートが自動的に作成されて、例えば、4月のシートでは、ピボットテーブルのレポートフィルタが4月になっていて、4月のデータが表示されています。
20150411_118.JPG
ちなみに一番最初に作った3月のシートは右端にあるので、所定の場所に移動させておきましょう!


関連ページ
これは便利!異なる名前の複数のシートを自動で作ってみた


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