2014/11/21

PowerPivot で計算列を作る

PowerPivot や Excel 2013 以降の新機能である「リレーションシップ」を使いテーブルをデータ モデルに追加するとピボットテーブルの「グループ化」や「集計フィールド」、「集計アイテム」が使えなくなることはすでに紹介した。

http://road2cloudoffice.blogspot.jp/2014/11/powerpivot.html

結論から言えば「データ モデル」を使った場合は PowerPivot を併用しないと、これまでピボットテーブルで行っていたことができないと思ってもいいだろう。前回は「階層」を使ったグループ化を紹介したが、今回は集計フィールドや集計アイテムに相当する「計算列」と「計算フィールド」について紹介する。

なお、繰り返しになるが、データ モデルを使うことで「グループ化」や「集計フィールド」や「集計アイテム」が使えなくなり、「新しい Excel 使えない」と早合点しないでほしい。そもそも PowerPivot は SQL Server や SQL Server Analysis Services と Excel を使った「データ分析」のために作られた Excel のアドイン機能であり、そのような分析のための機能は当然持っている。
そして、わざわざデータ モデルを使う理由はある。一つの例として巨大なデータを扱えることだ。データ モデルにすることでワークシートの制限がはずれ、100万行をゆうに超えるデータを扱えるようになるからだ。PowerPivot で扱う元データが数千万件であっても問題ない。そして、何件まで扱えるかは PC に搭載されているメモリーに依存する。そのため、そのような巨大なデータを扱う場合は Windows は 64bit を使い、Excel も 64 bit 版のものを使うことが推奨される。

計算列はすべてのレコードを対象に計算する

計算列や計算フィールドは PowerPivot ウィンドウで設定する。ここで設定をすることで、Excel のピボットテーブルのフィールドリストに表示され利用可能になる。そこからはこれまでのピボットテーブルと同様の操作性を提供することになる。

以下のようなリレーションのテーブルを例にして説明する。


個人売上テーブルのデータは「日付」、「名前」、「商品」、「個数」しかない。ここに売上金額の計算結果を追加したい、というケースだ。

個人売上テーブルの PowerPivot ウィンドウのデータビューが以下になる。


欲しいのは商品の単価と、個数と単価を掛け合わした金額である。
すでに個人売上テーブルと商品テーブルは「商品コード」(A,B,C,,,)でリレーションを張っているので、商品テーブルから「単価」の列をこの個人売上テーブルに追加する。
そのときに使うのが DAX 関数の RELATED 関数である。RELATED 関数を使うことで、関連付けられているテーブルから該当する「単価」が参照できる。Excel の VLOOKUP 関数のような働きをすると考えれば理解しやすいであろう。
以下がその操作である。Excel 同様に数式オートコンプリートも使える。非常に簡単なのがわかると思う。


次に個数と単価を掛け合わせた金額の計算列を追加する。これは Excel の数式とまったく同じ操作性だ。しかし、1点注意しなければならないのは Excel のテーブル同様、構造化参照の数式のように、最初の行に数式を入力することですべての行に対して同じ数式が入力されることだ。


これで金額の計算列が追加された。ここからピボットテーブルを作ってみよう。
そうすると、先ほど追加した計算列の「単価」と「金額」がフィールドリストにも表示されていることが確認できる。


個人売上テーブルには「商品名」はなかったが、商品テーブルとリレーションを張っているのでピボットテーブルでは参照可能だ。このためわざわざ商品名を RELATED 関数で参照する必要はない。


計算列ではほぼワークシート関数と同じものを使用することができる。
IF なども利用可能なので、単純な数値演算だけでなく、論理演算も可能だ。
Excel をすでに使いこなしているユーザーであれば、PowerPivot の計算列をすぐに活用できるだろう。

長くなったので、次回で「計算フィールド」について紹介したい。計算列がすべてのレコードを対象にして計算するものであり、計算フィールドは「ある条件で絞られたレコードを対象に計算する」と考えれば理解しやすいだろう。

マイクロソフトの記事
PowerPivotの計算列
https://support.office.com/ja-jp/article/PowerPivot-%E3%81%AE%E8%A8%88%E7%AE%97%E5%88%97-a0eb7167-33fc-4ade-a23f-fb9217c193af?ui=ja-JP&rs=ja-JP&ad=JP

PowerPivotの自習書
SQL Server 2012 自習書シリーズ
PowerPivot for Excel によるセルフ サービス分析

2014/11/16

PowerPivot で日付のグループ化

PowerPivot は強力な Excel のアドインであることは以前に紹介した。


ここで紹介したのが PowerPivot はデータモデルを採用しているため、これまでの Pivot テーブルの機能で使えていたものが使えなくなる、その代表が「グループ化」と「集計フィールド、集計アイテム」の追加だ。

コンテキストメニューのグループ化がグレイアウトされ選択できない状態

集計フィールド、集計アイテムがグレイアウトされ選択できない状態

特に日付のグループ化はデータを分析するためには必須である。この対応方法を今回は紹介する。なお、そもそも PowerPivot はマイクロソフト社の SQL Server のデータを Excel で分析するためのアドインとして開発された。そのため、Office や Excel から PowerPivot のテクニックを探すのは正直まだ情報が多いとは言えない。そのため、情報サイトなどで Excel を駆使して代替案を提示している場合が多いのだが、PowerPivot の機能として参照・検索するのであれば、SQL Server 側からの情報として探すと見つかる場合が多い。

日付のグループ化は「階層」を使う

(注) Excel 2016 の Power Query (取得と変換) は、自動グループ化機能が実装されました。

Excel はシリアル値というすばらしい仕組みを内蔵しているため、こと日付に関する処理・操作は非常に簡単に複雑なことができるようになっている。Excel の Pivot テーブルで日付をグループ化する機能などはシリアル値の恩恵を受けている。

一方、シリアル値を持たない通常のシステム、サーバーで日付を扱うには「年」や「月」といったデータを日付形式のデータから抜き出してレコードの別フィールドとして持たせる必要がある。Excel から見れば非常に面倒な処理をしているように思えるが、これは仕方ないとあきらめるしかない。

同様にデータモデルである PowerPivot では日付形式のデータから「年」や「月」を抜き出す必要が出てくる。

[PowerPivot] タブから [管理 データモデル] をクリックして、PowerPivot ウィンドウを開く。
そうするとそのブックに含まれているデータモデルを参照することができるので、該当するテーブルをデータシートビューで開く。


このデータモデルには「日付」があるので、このフィールドから「年」と「月」の列を新たに追加する。PowerPivot の場合はなるべく Excel ユーザーにも使いやすいように Excel に似た UI と関数が用意されている。(ただし、Excel の関数ではない。この PowerPivot で使う Excel のワークシート関数に似た関数を DAX 関数と呼ぶ。)

YEAR関数を使って年を抜き出す。データシートビューはワークシートではないので、関数の入力は直接セル(のようなもの)にできない。関数入力ボックスから行う必要があるので注意されたい。


MONTH関数を使って月を抜き出す。


列名は上書きで変更できるので、年、月とする。
次にこの「年」と「月」を使って、「年月」の階層を作成する。

データシートビューからダイアグラムビューに切り替える。
データモデルにある「年」で右クリックでコンテキストメニューを開き、「階層の作成」を選ぶ。


階層が作成されるので名前を「年月」にする。


「月」をドラッグして「年月」の「年(年)」の下にドロップする。


これで「年月」の階層が作られた。

これで PowerPivot ウィンドウから Pivot テープルを作ると、サンプルとして使った個人売上テーブルに「年月」フィールドが別の枠として追加されているのがわかる。


この「年月」の階層を使えば、日付のグループ化、グルーピングと同じことができるようになる。

以下がその操作だ。



まずは、PowerPivot の使い方などの情報は SQL Server の自習書としてマイクロソフトが公開しているので、本家の情報に目を通していただきたい。

SQL Server 2012 自習書シリーズ
PowerPivot for Excel によるセルフ サービス分析

MSDN PowerPivot for Excel チュートリアル
http://msdn.microsoft.com/ja-jp/library/gg413497(v=sql.110).aspx

2014/11/11

テーブルのすすめ Office 365 連携 SharePoint リスト

Excel 2007 以降で「テーブル機能」が重要になることを紹介してきた。

ピボットテーブルの参照先や、グラフの参照先にテーブルが指定されていれば、同様に元のデータの増減に自動的に対応する。元データの増減への自動対応は Excel 2003 以前では複数の関数を組み合わせることで対応できた場合もあったが、テーブル機能を使えばそのようなテクニックを使わなくても簡単に実現することがわかったと思う。

このような「参照先データ」は、通常「マスターデータ」と呼ばれるものや、ある条件の集計結果データであることが多い。(月次締めなど)それらの多くは個々人の PC に入っている Excel のワークシートで管理されていることは稀であり、小規模でも Access のデータベース、大規模になれば SQL Server や Oracle といった基幹システムのデータベース サーバーにある。

そのため、それらの参照データを「CSV形式」のファイルで入手し、Excel にインポートし、分析作業や、報告書作成のための集計作業をしているユーザーが今でも多い。

もし、それら元データの取得を Excel で取り込み、分析・集計作業が一連の流れの中で止まることなくできたら、、、と思うのは当然である。

Office 365 とは、Office 365 Pro Plus (Excel, Word, PowerPoint など) と、サーバーサービスである Exchange Online (メール サービス)、SharePoint Online (ポータル/ドキュメント共有サービス)、Lync (メッセージ サービス)を組み合わせた総称である。(Office 365 のプランによっては Office 365 Pro Plus が含まれないものもあるので注意すること。)

サーバーサービスが持っているデータと Excel を連携させるために、ここでも Excel の「テーブル機能」が重要な役割を担うことになる。いくつかご紹介しよう。

1) Excel のテーブルからリストを作る

SharePoint Online は「リスト」という機能を使って、データの蓄積が可能である。リストを使うためにはリストの設定をしなければならないが、このリストの基本設定は Excel を使ってできるのである。

以下のような「コースマスター」テーブルを使って SharePoint リストを作ってみよう。


コースリストのデータ列は「文字列」で書式設定されている。日数は数値、講師は文字列、開始日は YYYY/MM/DD のシリアル値だ。

SharePoint Online の詳細な説明はここではしないが、SharePoint で他の社員と共有するようなスペース(サイトと呼ぶ)を作成し、そこにこのコースマスターを元にしたリストを作ってみる。

SharePoint Online チームサイト 作成直後の初期状態トップページ

このサイトのトップページの URL を控えておき、Excel でコースリストのテーブル内にアクティブセルをおいて、リボンの [デザイン ツール] の [デザイン] タブの [外部のテーブル データ] セクションにある [エクスポート] の ▼ をクリックする。


[テーブルを SharePoint リストにエクスポートする] をクリックする。


アドレスに SharePoint のサイトの URL を入れる。ここでは読み取り専用接続を作成せずに、名前と説明を適宜入力する。なお、名前は英語で入力しておき、あとで日本語に変更することをお勧めする。 URL が最初に入力した英語で簡略化できるからである。


データ型についての確認ダイアログがでる。問題が無ければ [完了] をクリックする。
Excel のテーブルが正しく SharePoint のリストとしてエクスポートが成功すれば以下のダイアログが表示される。


ダイアログの URL をクリックすると、作成された SharePoint リストのページがブラウザで開く。


これで Excel テーブルの SharePoint Online のエクスポートが完了した。
勘違いしないでいただきたいのは、これは Excel のテーブルを「ひな形」として新たに SharePoint にリストを作成したものである。ここではなんの連携機能もない。コピーしたようなものである。

運用的に、今後は SharePoint Online のこの「コースリスト」がマスターデータとなって、データの追加や修正はこの SharePoint のコースリストで行う。このコースリストを参照する Excel ブックは、コピーを自分のブック上に持つのではなく、データ接続を使ってリアルタイムに SharePoint 上のコースリストを参照して、Excel で処理を行う、というものだ。

では、SharePoint のコースリストを新しい Excel ブックと連携させてみる。

SharePoint のコースリストのページにある [リスト] タブをクリックして、[Excel にエクスポート] をクリックする。


IE の下部に以下のダイアログが表示される。[ファイルを開く] をクリックする。





Excel が立ち上がり、データ接続をしようとするためセキュリティの確認ダイアログが表示される。[有効にする] をクリックする。


データのインポート方法を選択する。[テーブル] で、新規ブックで作成してみる。


SharePont Online のリスト「コースリスト」からテーブルが作成されたことが確認できる。


元の Excel のテーブルと比較すると [アイテムの種類] や [パス] が列として追加されている。

データ接続による SharePoint から Excel へのデータ エクスポートは SharePoint → Excel の一方通行である。Excel 側にあるテーブルはあくまで「参照用」であって、この Excel ブックのデータを変更しても SharePoint のリストが更新されることはない。

逆に、SharePoint 側のリストが変更されると、その変更はデータ接続をしているすべてのテーブルに反映される。ただし、その反映のタイミングは Excel ブックで [データ] タブの接続の更新もしくは [すべて更新] をクリックしたときである。(手動設定の場合)

一度データ接続を設定すれば、あとは明示的にデータ接続情報を消さないかぎり再利用可能だ。

以下は SharePoint 側で新たにデータを追加した手順である。

SharePoint のリストが更新された状態だけでは Excel ブックに変更は反映されていない。
以下、[すべての更新]をクリックした動きである。


このように SharePoint からのデータは「テーブル」となって Excel ブックで利用可能になる。
よって、Excel 側ではテーブルの利用方法、活用方法、さらにテーブルに対応したブックを作成しておくことで、Office 365 SharePoint との連携が現実となってくるのである。

なお、SharePoint Online のリストの制限(件数など)などが気になるだろう。
以下が SharePoint Online のリストの制限である。参照されたい。

列数: 列の要素によって制限が異なる。1行テキストの場合は最大 276 列を使用できる。
行数: 数千が実用範囲。数万もいけるがパフォーマンスを考慮すべき。数万の場合は Access アプリ(データベースエンジンは SQL Azure を使用)などを考慮。

アイテム数が多いリストとライブラリを管理する
http://office.microsoft.com/ja-jp/sharepoint-server-help/HA102771361.aspx

テーブル関連の投稿
[テーブルとVLOOKUP] https://road2cloudoffice.blogspot.jp/2014/10/vlookup.html
[テーブルと入力規則] https://road2cloudoffice.blogspot.jp/2014/10/blog-post.html
[テーブルと集計行] https://road2cloudoffice.blogspot.jp/2014/10/blog-post_31.html
[テーブルと構造化参照] https://road2cloudoffice.blogspot.jp/2014/11/blog-post.html
[テーブルとピボット] https://road2cloudoffice.blogspot.jp/2014/11/blog-post_7.html
[テーブルとVBA] https://road2cloudoffice.blogspot.jp/2014/11/blog-post_7.html

2014/11/07

[Excel] テーブルのすすめ ピボットテーブルとリレーションシップ

今回も Excel 2007 以降の重要な機能追加である「テーブル機能」を使った話です。

ピボットテーブルの参照先としてテーブルを使う

すでにテーブルを参照先範囲に指定することでデータの増減に自動的に対応する恩恵を受けることは入力規則や関数で紹介してきました。
同様にピボットテーブルの参照先範囲としてテーブルを指定すると、動的にデータの増減(参照先範囲の変化)に対応できます。ただしピボットテーブルの「更新」はこれまで同様押す必要はあります。


元データの行の追加だけでなく、列の追加にもピボットテーブルは対応します。


ピボットテーブルを使うユーザーはすでに参照先データがきれいな「表」になっているはずです。その表をテーブルに変換して、ピボットテーブルの参照先としてテーブルを指定するだけでこの恩恵を受けられるのです。これを使わない手はありません。

ただ、残念なことに、この「ピボットテーブル」の結果の表は「テーブル」機能で実装されていません。テーブル機能が出る前からピボットテーブルは存在し、その実装は同じ「テーブル」という用語を使っていても違うのです。ピボットテーブルの参照が構造化参照のようになれば、、、と思いがちですが注意してください。

そのかわりと言ってはなんですが、Excel 2013 以降でこのピボットテーブルとテーブルの組み合わせでさらに強力に業務を支援する機能が追加されています。それが「リレーションシップ」です。

VLOOKUPはもう使わない?Excel 2013 から実装されたリレーションシップ

上記で使ったテーブルには商品コードが記入されていて、商品名はありません。このようなデータの持ち方の場合は、商品テーブルが別に存在して、そこから商品名を VLOOKUP でこれまでは検索してきました。
(注釈ですが、この図のようなデータの持ち方、ピボットテーブルの配置はお勧めではないどころかやってはいけません。テーブルを使う場合は混乱を避けるために1ワークシート1テーブルとすべきだと個人的に考えます。すべてのデータを見せるためにこのような配置をしています。)


2つ程度であれば、列を追加して VLOOKUP を使ってデータを参照してもいいですが、基幹業務システムからデータをインポートしたり、何等かの形でそのデータを利用しようとしたりすると複数のテーブルに分けられた「正規化」されたテーブルであることが多いです。

これに対応するために Excel 2013 では「リレーションシップ」という機能が追加されました。

それぞれの参照データ範囲は「テーブル」に変換されている必要があります。
テーブルに変換されていると [データ] タブの [データ ツール] セクションにある [リレーションシップ] の [リレーションシップの管理] ダイアログで参照・テーブル間の関連付けが可能になります。


以下の3つのテーブルの関連付けを行ってみます。

個人売上テーブル


商品テーブル


地域テーブル


欲しいデータは個人売上テーブルの商品コードである A や B が商品名になったものや、その商品の地域名です。そのため、まず、個人売上テーブルと商品コードを関連づけます。ブック内のテーブルは「リレーションシップの管理」ダイアログのプルダウン リストに表示されるのでシートを移動して範囲指定するようなことはありません。個人売上テーブルで A, B, C... がある [商品] 列と、商品テーブルで A, B, C... がある [商品コード] を関連付けます。
続けて、商品テーブルと地域テーブルを関連付けます。今度は 001, 002, 003... がある列をそれぞれ関連付けます。



今は以下のような関連付けになっています。


ここまで設定したらピボットテーブルでこの関連付けが利用可能になります。
個人売上テーブルを参照先として指定したピボットテーブルを作ってみます。この時重要なのは、このリレーションシップを利用したい場合は必ず [複数のテーブルを分析するかどうかを選択] の [データモデルに追加する] をチェックすることです。


これで作成したピボットテーブルのフィールド リストにはこれまでなかったタブが表示されます。その中の [すべてのフィールド] をクリックすると、個人売上テーブルに関連付けられたテーブルが表示され、それを展開すると列名が表示されます。


この各テーブルの列名を使ってピボットテーブルを作成することが可能です。

このフィールド リストを使って、商品名別と地域名別の売上のピボットテーブルを作成してみます。


複数テーブルを使ったシンプルなピボットテーブルであれば、このリレーションの機能をどんどん活用すべきですが、その反面、実はこれまで Excel のピボットテーブルでできていたこと(それも重要なこと)がいくつかできなくなっていることに注意しなければなりません。(もちろん、その対応方法は存在します)それを以下に紹介します。

データモデルとは

ところで、ピボットデーブルを作成するときに [複数のテーブルを分析するかどうかを選択] で [このデータをデータモデルに追加する] にチェックを入れました。一体データモデルとは何なんでしょうか。

このブログで Excel 2007 以降のテーブル機能を紹介する発端となっているのは Office 365 との親和性でした。 http://road2cloudoffice.blogspot.jp/2014/10/excel-office-365.html

Office 365 の SharePoint Online や Access アプリ、クラウドや社内にあるサーバーのデータと、Excel との橋渡しをするのがテーブルです、と紹介しましたが、さらに正確にいうとテーブルとデータモデルによって連携できる、と言えます。

そもそも、このデータモデルという実装方法は Excel から発生したものではなく、マイクロソフト社のデータベースサーバーである SQL Server で Excel との連携のために開発された Excel アドインから来ています。

2007 Office リリース用 SQL Server 2005 データ マイニング アドイン
http://office.microsoft.com/ja-jp/excel-help/HA010225754.aspx

そのため、データモデルとなった「データの集まり」は Excel の機能を使うことができない場合もあります。

このリレーションシップ機能を使ったピボットテーブルとして実際に見ているデータはデータモデルから取り出しているものです。それは [データ] タブの [接続] の [ブックの接続] ダイアログから確認できます。ThisWorkbookDataModel はピボットテーブルの範囲を示しています。


そして、このデータモデルのリレーションシップを使ったピボットテーブルでの代表的な制限は以下です。
[追記] Excel 2016 からはこの制限はなくなっている。詳しくはこちらを参照のこと

・ グループ化ができない
・ 集計フィールド、集計アイテムを追加できない

グループ化はシリアル値である日付を月や年にまとめるためにピボットテーブルではよく使うでしょう。集計フィールドもデータに単価と数量があり、そこから金額を計算するときに使うことが多いです。

これらが使えないとピボットテーブルによる分析はできないも同然でしょう。しかし、そもそも「SQL Serer 2005 データ マイニング アドイン」から発展してきた実装方法です。このアドインはデータの分析のための機能です。

Excel が本来持っていた機能はデータモデルによりデータの持ち方が変わってしまったため利用できませんが、その代替は当然用意されています。

それがデータモデルに追加する「セット」であり、そこで利用する MDX 言語です。
(MDX : the MultiDimensional eXpression)

上図「ブックの接続ダイアログ」で ThisWorkbookDataModel を選択した状態で [セットの管理] ボタンを押せば、新しいセットの追加や MDX 編集画面がでます。

ただ、公開されている日本語の情報が非常に少ないのと、Excel 側からの観点よりも、SQL Server のアドイン(Analysis Services)側からの情報に偏ることが多い、さらに SQL 構文などのデータベースの知識を必要とするため、Excel ユーザーにとっては習得は厳しいかもしれない、というのが現状でしょう。

このような状況を打破し、Excel ユーザーにも直感的にわかりやすく、Excel の操作性に近い設定を提供するのが PowerPivot です。 PowerPivot の対象はクラウドやサーバーのデータだけでなく、Excel ブック内のデータモデル化したテーブルも対象にできます。つまり「テーブル」であれば、PowerPivot からの利用が可能なのです。

PowerPivot で日付グループ化、集計列追加でピボットテーブルを作った例

ただし、PowerPivot を使うには「エディション」に注意しなければなりません。
Personal エディションや Home & Business エディションでは PowerPivot を利用することができません。利用するには Office 2010 以上の Professional や Solo 、Office 365 Pro Plus が必要となります。

[追記] Power Pivot で日付のグループ化
http://road2cloudoffice.blogspot.jp/2014/11/powerpivot.html

テーブル関連の投稿
[テーブルとVLOOKUP] https://road2cloudoffice.blogspot.jp/2014/10/vlookup.html
[テーブルと入力規則] https://road2cloudoffice.blogspot.jp/2014/10/blog-post.html
[テーブルと集計行] https://road2cloudoffice.blogspot.jp/2014/10/blog-post_31.html
[テーブルと構造化参照] https://road2cloudoffice.blogspot.jp/2014/11/blog-post.html
[テーブルとピボット] https://road2cloudoffice.blogspot.jp/2014/11/blog-post_7.html
[テーブルとVBA] https://road2cloudoffice.blogspot.jp/2014/11/blog-post_7.html

2014/11/04

[Excel] テーブルのすすめ 構造化参照

Excel 2007 以降で最も重要な機能は「テーブル機能」です。

参照先のデータとしてテーブルを使うとデータの増減に対応できます。この増減に対応するための記述方法が「構造化参照」であり、これまでの A1:C4 や $A$1 などの参照方法と違います。

構造化参照の利用は難しくない

ただ、さすが Excel です。普通の使い方をしていても、あまり意識せずに構造化参照を使うことができます。


[手数料金額]列の1行目に「 = 」入力のあとにカーソルを動かし、同じ列の [売上金額] と [手数料] を選ぶと、構造化参照された [@売上金額]、[@手数料(%)] が入力されます。 @の意味は「この行の」という意味です。そして2行目以下の[手数料金額]に同じ数式がすべてに挿入されます。

テーブルの外のセルから参照すると「テーブル名」が自動挿入されることもわかるでしょう。
そして、列全体を選べば 「 DeptSales[手数料金額] 」 や 「 DeptSales[売上金額] 」、「 DeptSales[営業担当者] 」を参照します。列名をいれると、その列にあるすべてのデータ行を選択します。(これを完全修飾といいます)

この構造化参照式を理解すると、カーソルで範囲を選らばずに列全体を参照する式をいれて、合計やカウントを出すことができます。もちろん、数式オートコンプリートが入力を支援してくれます。

なお、数式オートコンプリートのドロップダウン リストからの選択は下矢印、上矢印のキーを使って移動し、[TAB] キーで確定します。


集計行をテーブルの一番下に追記することをすでに紹介しましたが、その集計行の値を構造化参照で参照することも可能です。これはオートフィルターの結果を取得するのに有効です。(以下のように同じワークシート内で参照することは少なく、出力用・報告用の別ワークシートから参照することが多いでしょう。)


これらの構造化参照式は以下のマイクロソフトのページにくわしく解説されています。
翻訳が中途半端なので読みづらいですが、だいたいの概要はわかると思います。

Excel テーブル数式で構造化参照を使う
http://office.microsoft.com/ja-jp/excel-help/HA102749547.aspx

ただ、構造化参照式を直接入力しなくても、テーブルのセル範囲を選択したとき、それが構造化参照できるようであれば自動的に構造化参照式が入力されるので、あまり難しく考える必要はありません。そのような式が数式に入力された時に驚かないことのほうが重要です。

構造化参照を使いたい関数

すでに VLOOKUP 関数で構造化参照の使い方を紹介しましたが、他にも構造化参照の恩恵を受ける関数があります。「範囲」や「列番号」を使う関数は構造化参照の利用を検討してみるとよいでしょう。

MATCH 関数 http://office.microsoft.com/ja-jp/excel-help/HA102752945.aspx

検査範囲で構造化参照を使います。ただし、列名を検査して列番号を取得したい場合は、COLUMN 関数と構造化参照を組み合わせたほうがシンプルで見やすいでしょう。
テーブルでの使用用途は検索したい文字列/数値を列全体に対して行い、行数を取得するパターンです。ただし、VLOOKUP 関数同様、検査対象列に一意のデータ(ユニークなデータ)が入力されていれば簡単ですが、同じデータが存在する場合は格段に利用(数式)が難しくなります。本当に関数でやらなければいけないのか、テーブルのオートフィルターを使って目視での絞込みによる利用ができないかを検討してください。また、VBA はこのようなケースが得意です。

INDEX 関数 http://office.microsoft.com/ja-jp/excel-help/HA102752976.aspx

MATCH 関数で行番号が分かれば、次に使うのは INDEX 関数です。
列番号は上述のように COLUMN 関数を使えば、行と列で指定したセルの内容を取得できます。
また、対象となる列が決まっている場合は以下のように記述できます。

DeptSales テーブルの営業担当者列の3番目(3行目)を取得
(この "3" をMATCH関数で取得するパターンが多い)

=INDEX(DeptSales[営業担当者], 3)

SUMIF および SUMIFS 関数

SUMIF 関数 http://office.microsoft.com/ja-jp/excel-help/HP010062465.aspx
SUMIFS 関数 http://office.microsoft.com/ja-jp/excel-help/HA102753226.aspx

地域が南西部(A1)の売上金額の合計を求めているのが以下です。



その他の使い方

行数をもとめる =ROWS(テーブル)

 見出し(列名)と集計行が除外され、データ部分の行数を返します。SUBTOTAL 関数の COUNTA で列を指定した場合は、空のセル(行)はカウントされません。反面、ROWS 関数を使うと空の行もカウントされます。

列数をもとめる =COLUMNS(テーブル)

列番号をもとめる =COLUMN(テーブル[列名])

構造化参照とオートフィル

構造化参照を使った数式をオートフィルでコピーできます。
相対参照としての動きが基本です。
以下では第1四半期の合計をサマリーの表に SUM 関数を使って計算し、オートフィルで、第2、第3、第4四半期の合計をオートフィルで数式のコピーをしています。


色別の合計を出すために SUMIF 関数を使います。この時は注意が必要です。
適切でない構造化参照が以下です。


オートフィルによって、SUMIF の検索範囲を指定した dataTbl[色] が移動するためです。
この場合、dataTbl[色] を絶対参照のような指定をしなければなりません。
その指定方法が dataTbl[[色]:[色]] です。こうすることでオートフィルを使っても検索範囲が移動することはありません。


なお、テーブルに限った話ではありませんが、SUMIF 関数の検索条件の指定で、カーソルを動かして「B4」を指定し、F4 キーを押すことで相対参照, 絶対参照の切り替えができます。

テーブル関連の投稿
[テーブルとVLOOKUP] https://road2cloudoffice.blogspot.jp/2014/10/vlookup.html
[テーブルと入力規則] https://road2cloudoffice.blogspot.jp/2014/10/blog-post.html
[テーブルと集計行] https://road2cloudoffice.blogspot.jp/2014/10/blog-post_31.html
[テーブルと構造化参照] https://road2cloudoffice.blogspot.jp/2014/11/blog-post.html
[テーブルとピボット] https://road2cloudoffice.blogspot.jp/2014/11/blog-post_7.html
[テーブルとVBA] https://road2cloudoffice.blogspot.jp/2014/11/blog-post_7.html

Powered by Blogger.

自己紹介

自分の写真
1989年新卒で日本IBMに入社しダウンサイジング担当としてホストコンピュータと繋げるオフコン、UNIX、PCサーバーのプロジェクトを担当。1997年 MSKK(現日本マイクロソフト)入社、NT4出荷に伴い企業向けサポート部門のビジネスマネージャーとして Excel 使いとなり、2002年 にMSMVPなどをサポートするユーザーコミュ二ティ部門を設立、部門をリード。2006年にMSKK退職後、企業向けのITトレーニング会社・団体に携わり、2014年頃よりPowerBI勉強会主催メンバーの一人として参画、そのコミュニティ活動で MSMVP for Data Platform PowerBI 2017受賞。https://mvp.microsoft.com/ja-jp/PublicProfile/5002635 同年にMVP Awardを返上し、アマゾン ウェブ サービス ジャパンに入社、コミュニティプログラム担当として現在に至る。