2014年10月18日

複数のテーブルからピボットテーブルを作ってみた(リレーションシップ)/Excel2013/ピボットテーブル

Excel2013ではデータベース機能が大幅に向上されています。ACCESSとの使い分けに悩みそうになるかもしれませんが、ACCESSを使うスキルと、ソフトを使う環境を整えるコストを考えれば、Excelである程度データベースをカバーできるようになればありがたいことだとでしょう。
別の見方をすれば、Excelに対して科学技術計算より統計分析へのニーズが求められているということ、つまり時代の要求ということなのかもしれないですね。。。

んで、Excel2013のピボットテーブルに関していえば、テーブル間のリレーションシップが出来るようになったのが画期的なことだと思います。
“リレーションシップ”というのは“関連付け”のことで、複数のテーブルにある共通のフィールドに関連付けを行って、あたかも2つのテーブルを1つのテーブルとして集計させることです。。
20141019_01.jpg

では早速、やってみますね。。
食料品の商社(問屋)の受注データがあります。ワークシートは“受注テーブル”、“商品テーブル”、“顧客テーブル”の3つのシートに分かれています。
データベースの場合“テーブル”というのはデータが入力(格納)された表(データ)のことをいいます(つまりExcelのワークシートに当たります)。ところがExcelの場合、“テーブル”というのは、“テーブル”として定義された(設定された)表のことをいいます。このへんが紛らわしいところです。

んで、シート“受注テーブル”は受注した日と受注した顧客(得意先)と商品、その受注した数が入力されています。得意先と商品は其々のコード番号で入力されていて、いちいち顧客名や商品名を入力する手間を省いています。
20141017_01.JPG

シート“商品テーブル”には、“商品コード”に対応した“商品名“、その商品の“単価”が入力されています。
20141017_02.JPG

シート“顧客テーブル”には“得意先コード”に対応した“得意先名”が入力されています。
20141017_03.JPG

まず、それぞれのワークシートの表を“テーブル”に設定します。
表の中にカーソルを置いて「挿入」から「テーブル」を選択します。
20141017_101.JPG

「テーブルツール」、「プロパティ」、「テーブル名」で、テーブルの名前を設定します。
ここでは、ワークシートの名前と同じにしています。
20141017_102.JPG

このような“テーブル”が出来ました。
20141017_103.JPG
同様に“商品テーブル”、“顧客テーブル”もテーブルの設定をしておきます。

次に、受注テーブルでピボットテーブルを作ります。
テーブルのセルを選択しておいて、
「挿入」、「テーブル」から「ピボットテーブル」を選択します。
20141017_104.JPG

「ピボットテーブルの作成」画面が開きます。
ここで、他のテーブルとリレーションシップにする時は、
「このデータをデータモデルに追加する」をチェックします。
20141017_105.JPG

と、こんなピボットテーブルが出来上がりました。
20141017_106.JPG

フィールドリストにある「すべてのフィールド」を選択します。
20141017_107.JPG

すると、テーブルに設定した“顧客テーブル”、“商品テーブル”もフィールドリストに追加されました。
20141017_108.JPG

▼をクリックするとテーブルのフィールドが表示されるので、必要なフィールドを下のリストにドラッグします。
20141017_109.JPG

まず、“商品テーブル”から“商品名”を行ラベルに、“受注テーブル”から“数量”を値に設定します。
すると、上の方に黄色のボックスでリレーションシップを催促するメッセージが表示されます。
“商品テーブル”の“商品名”と“受注テーブル”の“数量”の間には何の関係もないのでこのままでは、“商品名”に対する“数量”の集計ができません!と言ってるわけです。
では、何を基準に2つのテーブルを関連付ければいいかというと。。。
2つのテーブルで共通に持っているフィールドの“商品コード”になるわけです。

んで、「作成」を選択します。
20141017_110.JPG

「リレーションシップの作成」画面が開きます。
「テーブル」に“受注テーブル”、「列」に“商品コード”
「関連テーブル」に“商品テーブル”、「関連列」に“商品コード”
を設定します。
これで、2つのテーブルの“商品コード”が関連付けられました。
20141017_111.JPG

すると、ピボットテーブルは“商品テーブル”の“商品名”に対して“受注テーブル”の“数量”がそれぞれの“商品コード”を基準に集計されました。
20141017_112.JPG

次に同じように“顧客テーブル”もリレーションシップしてみます。
“顧客テーブル”から“得意先名”を列ラベルに設定します。
すると、リレーションシップの作成を催促されます。
20141017_114.JPG

「リレーションシップの作成」画面で
テーブル」に“受注テーブル”、「列」に“得意先コード”
「関連テーブル」に“顧客テーブル”、「関連列」に“得意先コード”
を設定します。
これで、今度は“受注テーブル”と“顧客テーブル”の“得意先コード”が関連付けられました。
20141017_115.JPG

すると、“数量”の“商品名”と“得意先名”のクロス集計が出来上がりました。
20141017_116.JPG

Excel2010までだと、この様な集計では“VLOOKUP関数”を使って“商品コード”から“商品名”を検索して表示させる方法しかありませんでしたが、Excel2013のリレーションシップを使うと、ピボットテーブルだけで、この様な集計が可能になります。
それぞれのテーブルはとてもシンプルになり、余計なデータを省くことができますね。。

では、次はリレーションシップを設定した時に出来なくなる(制限される)機能についてまとめてみました。
重要ですので必見です。

Excel2013の新機能
スライサーとタイムラインを使ってみた

関連ページ
Excelでデータの作り方
テーブルを作ってみた/Excel2007
ピボットテーブルを作ってみた/Excel2007
ピボットテーブルでクロス集計を作ってみた/Excel2007
posted by haku1569 at 11:46| Excel ピボットテーブル | このブログの読者になる | 更新情報をチェックする