- 行・列の追加時にテーブルの範囲が自動的に拡張されます。右クリック→「削除」→「テーブルの行(列)」を用いれば縮小も自動です。
- 数式の入力・変更がすべての行に反映されるので、式の一部更新漏れを防げます。
- データをテーブル名と列名により取得でき(構造化参照)、行・列の番号を意識する必要がなくなります。
- その他にも見やすいデザインが適用される、フィルタが適用される、リレーションシップの設定が可能になるなどの特典が得られます。
手順
表をテーブル化する操作
まずはテーブルを作成する方法の確認です。
表をテーブルにする方法はいくつかありますが、画像のように表の内部を選択した状態で「挿入」タブを選択し「テーブル」メニューをクリックする方法が代表的です。
表がテーブルになりました。実際にテーブルであるかどうかはテーブル内部を選択したときに、ウインドウ上部に「テーブルデザイン」タブが表示されるかどうかで区別できます。
また、テーブルの右下部分にカギカッコ状のマークがつき、テーブルの範囲を把握できるのがポイントです。
なお、テーブルの作成方法の詳細については次の記事で紹介しています。
テーブル化の効果
範囲が自動的に拡張される
画像は、B9セルに新たな値を入力したところです。
行に色がつくとともに、右下のカギカッコ状のマークも1行下に移動しているのがわかります。
このように、新たな行の追加とともにテーブルの範囲は自動的に拡張されます。
こちらはさらにE3セルに新たな値を入力したところです。
ここでもテーブルの範囲が自動的に拡張され、E2セルに「列1」という仮の列名がつけられているのがわかります。
なお、このように行や列が拡張されるのはテーブルに隣接するセルに値を入力したときだけです。
テーブルから離れたセルに入力しても拡張はされません。
数式の入力と変更がすべての行に反映される
以下ではこのようなテーブルを用いるものとします。
なお、このテーブルには「会員テーブル」という名前を付けています。
ちなみにテーブル名の確認と変更については次の記事で紹介しています。
さて、まずはF3セルに「=」と入力してE3セルをクリックしたところです。
通常の表であれば「=E3」となるところですが、ここでは「=[@体重]」となりました。これは同じ行にある「体重」の値を参照していることを意味しています(「@」は「参照元と同じ行」を表す記号です。列名で値を参照できることも含めて、テーブルの効果です)。
なお「=D3*E3」といったセル番号に基づく数式にすることも可能ですが、ここではこの参照方法を利用して入力を進めます。
さらに式を「=[@体重]/[@身長]」としたところです。
つまり体重と身長の比率を求めているわけですが、この式を確定すると……
テーブルが拡張されるとともに列のすべてのセルに同じ式が入力され、結果が得られます。
ここでさらに入力済みの式を変更します。
F3セルの式を次のように変更してみます。
F3セル
=ROUND([@体重]/([@身長]/100)^2,2)
「体重/(身長の2乗)」つまりBMIを小数点以下2桁まで求めるという内容の式です。
式を確定すると、やはり列のすべてのセルに反映され、値が変化しました。
このように、テーブル内の数式の追加・変更はすべての行に反映されるため(途中の行の式を変更した場合も同様)、一部の式の更新が漏れるような手違いが起こらなくなります。
ちなみに「=D3*E3」といったセル番号に基づく数式にした際も、すべての行への反映は同様に行われます。
データをテーブル名と列名で参照できる(構造化参照)
ここではテーブルの内容を外部から参照してみます。
画像はH3セルに「=会員テーブル」と入力した結果ですが、このようにテーブル名を記すとテーブルのデータ部分(見出しを除く)を取得することができます。
さらに角カッコ([ ])を使って特定の列や一定範囲を参照することができます。
「[」を追加した時点で各種の候補が表示され、入力をスムーズに進めることができます。
ここから「身長」を選んで「=会員テーブル[身長]」という式にすると、身長の列(見出しを除く)を参照することができます。
「#すべて」を選び、「=会員テーブル[#すべて]」という式にすると、見出しを含めた全体を参照することができます。
なお、この画像では式をH2セルに入力しています(他の画像より1行上)。
「#データ」を選び、「=会員テーブル[#データ]」という式にすると、見出しを除いた全体を参照することができます。
これは「=会員テーブル」としたときと同じ結果となっています。
こうした参照はもちろん計算にも利用できます。
画像は「=AVERAGE(会員テーブル[身長])」と入力して身長の平均を求めたところです。
こちらはXLOOKUP関数を使って、会員番号が「A702」である会員のBMIの値を求めたところです。
引数の多い関数を使うと意味がわかりにくい数式になりやすいですが、適切なテーブル名と列名を定義することで理解しやすい数式にすることができます。
テーブル化のメリットまとめ
表をテーブルにした際の効果について紹介してきましたが、ここで主なメリットを改めて整理します。
表の範囲を把握・調整する負担を軽減できる
通常、表には次々とデータが追加されていきます。これがどこまで広がっているのかを把握し、必要に応じて拡大・縮小するというのは厄介な問題で、例えば「VLOOKUPの検索範囲(第2引数)をデータの追加に合わせて拡張するにはどうすればよいか」といった問題はExcelのFAQの一つでした。しかしこれは表をテーブル化することで解決できます。テーブルの右下部分にマークがつくため視覚的に把握しやすいのもポイントです。
なお、データを削除するときはテーブル内で右クリックして「削除」→「テーブルの行(列)」のメニューを用いるのがセオリーです。テーブル内の行・列だけを一括削除できるうえ、テーブルの範囲も適宜縮小します。
数式の一部更新漏れを防げる
入力済みの数式を更新した際に途中の行までしか更新されておらず誤った表になってしまった、というのはよくあるミスかと思います。
しかしテーブル内の数式は最後の1行まで一括して変更されますので、このようなミスを防ぐことができます。
行・列番号を扱う負担を軽減できる
表をテーブル化することで、必要なデータは「テーブルの名前」と「列の名前」を通じて取得することができます(さらに列内の一部の値が欲しい場合は「Aで始まるもの」とか「70以上のもの」といった値の特徴により絞り込むこととなります)。
これにより「E3」とか「D3:D9」といったセルの番号(位置情報)を意識する必要が基本的になくなります。
なぜこれが重要なのかというと、テーブルの名前や列の名前は(適切に命名すれば)ユーザーにとって意味のあるものとして認識しやすいのに対し、セルの番号というのは本来ユーザーにとって無意味で価値のない情報だからです。例えば「=AVERAGE(会員テーブル[身長])」という式を見れば、やろうとしていることが一目瞭然です。しかし「=AVERAGE(D3:D9)」では参照先の内容を見ない限り集計の意図を理解することはできません(見てもわからない場合さえあります)。ごく小規模なデータであれば気にするほどのことではありませんが、扱うデータが複雑・大規模になるにつれてこの「データの位置情報をいちいち気にしなくてよい」という点がメリットとして生きてきます。
なお、範囲に名前を付ける(名前の定義)という、古くからある方法でも同様の効果が得られましたが、テーブルでは列名まで定義できるので、さらに高い効果が得られるようになっています。
その他
上記の画像からわかるように、テーブルには1行おきの色付けが適用されるほか、自動的にフィルタが追加されるといった特典が得られます。
また、リレーションシップという、複数のテーブルの対応付けをする機能が利用できるようになります。これも興味深い機能なのですが、なかなか複雑な機能なので別途紹介したいと思います。
テーブルの使いどころ
テーブルには多くの利点がありますが、ありとあらゆる表に適用すればよいというものではありません。
テーブルに向くのは、それぞれの列に記録すべき値の内容がきちんと定められていて、1件のデータが1つの行に収まるような整然とした表です。そのような表は、集計したり分析したり様々な形で活用するのが容易なので、基礎的な、いわば「生のデータ」を格納するのに向いています。こうした表にテーブルを適用すれば集計をはじめとする各種の活用を一層効率的に進められるようになり、大きな意味があります。
一方で、例えば小計行がいくつも含まれたクロス集計表や、デザインが込み入った印刷用の帳票は、テーブルにするのには向きません。そもそもこうした表にテーブルを適用しようとしても上記のような制約が邪魔になり設定自体ができません。また、そのような表は人間にとって見やすくするために加工されたものであり、その引き換えとして集計したり情報を取り出すのが難しい形になっています。よって、テーブルを適用できるように表の内容を変更しようとするのも、見やすさというメリットを失うだけで基本的に無駄にしかなりません。