2
2

Excelで「テーブル機能」を使わない理由がない ~神Excelから機械判読可能なテーブルへ~

Posted at

はじめに

この記事の概要

  • テーブル機能の本来の意義は、Excelを機械判読可能なデータベースとしてコンピュータに認識させることである
  • テーブル機能を使うことで様々なメリットが享受できるというだけでなく、近年ではテーブル機能の使用を必須とするツールが多数存在する
  • テーブル機能を広めることは、世の中の神Excelを減らし、利用性の高いデータを増やすことにつながる

この記事の目的

ここ数年のExcelの機能追加に伴い、テーブル機能はますます重要になってきている。しかしながら、世間ではまだ認知度が低いし、存在を知っている人にも本来の意義が理解されていないことが多い。そこで、テーブルとは何か、どのようなメリットがあるのかなどを、本来の意義を踏まえて伝える。そして、それにより世の中の神Excelを減らし、利用性の高いデータを増やすことを目的とする。

テーブル機能とは

テーブル機能とは、Ctrl + Tにより作成できる特別な領域「テーブル」についての機能である。
table_2.png
左:通常のセル範囲   右:「テーブル」

「table」は日本語の「表」に対応する一般的な英単語だが、ここではテーブル機能によって作られるものを単に「テーブル」、そうでないものを「表」「セル範囲」などと呼び分けることにする。

テーブル機能についてのよくある誤解

先の図の通り、セル範囲をテーブル化したとき真っ先に気付くのは、行の色が設定されるなど、見やすいスタイルが適用されることだ。それが理由か、ネットなどのテーブル機能の説明では

テーブル機能とは、見た目のきれいな表が簡単に作れる機能です!

などと書かれていることが多い。この説明は最悪である。本来の意義を理解しておらず、テーブル機能の地位を不当に貶める原因になっている。

テーブル機能の本質的な意義

では、テーブル機能の本来の意義は何かというと、
領域をデータベース構造としてコンピュータに認識させ、データの整理と分析を効率的かつ効果的に行えるようにする
というものである。
その結果として、後述する様々なメリットが享受できるようになる。

テーブルの構造

「データベース構造」と書いたが、これはいわゆるリスト形式の表や、リレーショナルデータベースRDB)におけるテーブルの構造を指している。具体的には次のようなものである。

  • テーブルは、決まった種類のデータを格納するカラムの集合である
  • テーブルは、データと、カラム名を表すヘッダーを持つ
  • データは、1つ1つの出来事などを表すレコードの集合である
  • レコードは、各カラムに対応したフィールドの集合である

詳しい説明は省くが、Excelユーザー的には

  • カラム   = 列1
  • ヘッダー  = 見出し行
  • データ   = 見出し以外の行
  • レコード  = データの1つ1つの行
  • フィールド = セル

と捉えてしまって構わないだろう。
image.png
ただし重要なのは、
テーブルにおいては行番号、列番号、セル番地という概念が存在しない
ということだ。
テーブルを扱う上では、

  • レコードを指定するときはID
  • カラムを指定するときはカラム名
  • フィールドを指定するときはIDとカラム名(この文脈ではフィールド名とも呼ぶ)

を用いる。

説明のために、下図左のテーブル、セル番地D5、すなわちD列5行目にあるデータについて考えてみよう。
もしもこの表周辺のセル範囲について、下図右のように、行・列の挿入・削除や並べ替えを行うと、該当データはE6に移動する。つまり、同じデータを表すのにセル番地が変わるということだ。Excel的に考えれば当然の話ではある。
image.png

一方で、テーブルとして考えた場合、いくら行・列の挿入・削除や並べ替えをしようとも、該当データは「買い物ID4の単価フィールド」のまま変わらない。つまり、同じデータを表すときは常に同じ指定ができる。
そもそも論として、特定のデータを指定するのに「D列5行目」などと呼ぶのは単なるExcelの都合であって、我々が本来指定したいのは「4というIDが付けられた出来事(買い物)についての、単価の情報」である。データベースの構造はその本来の意味を表すようにできているわけだ。
Excelのテーブル機能とは、このような構造を機械が認識できるよう定義するものであり、それが後述する様々なメリットにつながってくる。

テーブル機能のメリット

ここまでの話を踏まえ、具体的なテーブル機能のメリットを紹介する。

構造化参照が使える

構造化参照とは、セル番地ではなくテーブルの構造を反映して数式を記述できる参照である。これを使うと数式の可読性向上データ増減時の保守性向上などの効果が得られる。Excel内で見た場合の最大のメリットだろう。具体例を見ていく。

数式の可読性向上

テーブル内からの参照

通常のエクセル数式は、D2*E2のように、セル番地で数式を記述する。
image.png
見慣れた書き方ではあるが、D2E2が何を指すのかは、そのセルを見に行かないとわからない。

一方、テーブル化してある場合、[@単価]*[@個数]のように、フィールド名を使って数式を記述できる。これが構造化参照である。
image.png
これなら数式単独を見ただけで何の計算なのか即座に理解でき、非常に可読性が高い

テーブル外からの参照

テーブル外からもテーブルの値を使って計算したい場合もあるだろう。たとえば列の集計をするときにF2:F6などと書く。
image.png
この例のように参照先がすぐ近くにあればよいのだが、集計は元データから離れた場所や別のシートになっていることも多い。そうすると、やはり数式が具体的に何を参照しているのか、わざわざ確認しにいかなければならない。

構造化参照ではtbl_買い物[小計]のように書ける。
image.png
tbl_買い物というのは、このテーブルのテーブル名で、それに[カラム名]を続けることで、そのテーブルのカラムを参照できる。この場合も通常の参照より圧倒的に可読性が高い。また、テーブルは必ずブック内で重複しない名前を持つので、他シート含めブックのどこからでも同じ記述で参照できる
なお、先ほどの例ではカラム名に@がついていたが、この記号は数式が記述されている行の参照であることを表す。カラムの全データを参照するときは[カラム名]、テーブル内から2自身のレコードのフィールドを参照するときは[@カラム名]のように書かれる。

データ増減時の保守性向上

Excel長年の課題として、データの増減にどのように対応するか、というものがあった。例えば、データの全ての行を集計したいような場合に、データ行が増えると集計数式の参照範囲を直さねばならない。
image.png
図:データが追加されて集計の数式に修正が必要な例

この対策として、

  1. 最初から多めの範囲(F2:F100など)を参照しておく
  2. 列全体(F:F)を参照しておく
  3. COUNT関数やOFFSET関数などを駆使してデータ範囲を判定する

などの手法が存在した。
1は明らかに無駄かつ美しくない。2は全行(約104万行)を参照するので余計な負荷をかけてしまう。3はいくらかマシだが結局COUNTで余計なデータ範囲を選んでおかねばならないし、参照のためだけにこのような数式を組むのも面倒である3

構造化参照を使えばこの問題は簡単に解決する。
まず、テーブル最下行のすぐ下にデータを入力すると、自動でテーブルの範囲が拡張される
(これは構造化参照というよりテーブル機能の仕様)。
image.png
このとき、集計数式の参照範囲も変わらねばならないが、構造化参照の[カラム名]テーブルのカラム全体を参照するという仕組みなので、特別な工夫をすることも数式を書き換えることもなく、常に正しい範囲を参照できる
image.png

VBAでのテーブル参照

VBAでもワークシートと同様に構造化参照が使えるほか、テーブルに与えられるListObject型を使って操作することもできる。できることの大きな違いとして、構造化参照では特定のレコードを示すのが不可能だが、ListObject型では可能という点がある。ループを回すことを考えるとListObjectのほうが使い勝手はいいだろう。

余談:VLOOKUPとXLOOKUPの参照方法の違い

XLOOKUP関数が登場したとき、VLOOKUP関数の上位互換だとして話題になった。このXLOOKUP関数の参照方法も、セル範囲ではなくテーブルを想定したものである。VLOOKUPは検索列と戻り列を列インデックスで決定するため、先に述べたような列の挿入・削除や並べ替えに弱かった。一方、XLOOKUPでは検索列と戻り列そのものをそれぞれ指定するため、列位置というワークシート的な制約から解放され、純粋にテーブルの構造だけに対応して数式を書ける。

他のツールとの連携に必須

ここ数年はローコード・ノーコードの業務効率化系ツールがトレンドになっており、MicrosoftでいうとPower Query、Power Automate、Power Appsなどが代表的である。これらはいずれもExcelと連携できるが、基本的にはテーブル機能の使用が必須である。フォーマットの自由度が高すぎるExcelでそのようなツールを使うためには、対象をテーブルに限るのは必然と言える。Microsoftエコシステムの恩恵を受けるためには、テーブルにした方がいい、というレベルではなく、必ずテーブルにしないといけないという時代が既に来ているのだ。

その他

セル結合ができない

レコードは独立しているものなのでセル結合ができない。これだけでもすごく嬉しいという人は多いだろう。
たまに

テーブル機能を使うとセル結合ができないのが「デメリット」である

という人がいるが、それはテーブルを理解していない証拠なので要注意である。

オートフィルターが自動で設定される

テーブルには行番号という概念がないので、フィルタリングや並べ替えは常に可能である。だからオートフィルターは自動で設定される。

スクロールしてもヘッダーが常に表示される

Excel側がヘッダーを認識しているので、スクロールした際に常に自動でヘッダーを表示させることができる。ただのセル範囲であればExcelにはどこがヘッダーか判断できないので、手動で固定表示を設定してやる必要がある。

数式や書式などはカラムごとに全レコードで同じになる

1つのカラムには同じ種類のデータが入っているので、基本的に数式や書式などは全レコードで同じものが自動で適用される。「基本的に」と書いたのは、手動で個別に設定することもできるからだが、もちろんそれは避けたほうが良い。
Excelをデータベースとして使うときネックになるのが入力関連機能の弱さだが、それをある程度カバーする、改良されたチェックボックスドロップダウンリストも自動で追加行に設定されるからありがたい。

集計行の追加や設定が簡単

1つのカラムには同じ種類のデータが入っているので、適切な関数を選べば集計ができる。また、集計すべき範囲も全レコードと決まっている。だからワンクリックで集計行有無や計算の種類を設定することができる。

見た目が設定される

デザインを簡単に設定できる。人間に対してテーブルの構造を伝えるという意味では有効な手段である。

テーブル機能の基本的な使い方

具体的な操作方法については他でもいろいろと説明があるので詳細は省くが、ここでは本来の意義を踏まえて使うためのポイントを紹介していく。

テーブルの作成

テーブル設計

どのようなテーブルを用意し、どのようなカラムを設け、どのようにお互いを関連付けるか決めることをテーブル設計という。これはExcelというより完全にリレーショナルデータベース(RDB)の領域であるのでここでは触れないが、テーブル機能を使うならRDBの基礎知識は調べておくことを強く推奨する。

セル範囲をテーブル化するタイミング

いつでもテーブル化は可能だが、基本的にできるだけ早め、具体的にはヘッダー行とレコード1行を入力し終えた直後までを推奨する。
理由は以下の通り。

  • テーブルにすると専用の入力支援機能が使えるから
  • レコードを2行以上作成すると、数式や書式等が行ごとに変わってしまう恐れがあるから

セル範囲のテーブル化

テーブルにしたいセル範囲内をどこでもいいので選択し、Ctrl + T(テーブルのT)、またはCtrl + L(リストのL)をクリックする4

テーブル名の設定

テーブルを作成したら、すかさず「テーブルデザイン」タブからテーブル名を設定しよう。デフォルトでは「テーブル1」などの名称が付けられているが、後々のため分かりやすい名前にすることが望ましい。その際、名前は半角アルファベットまたはアンダースコア(_)から始めると、数式編集中に入力支援が使えるのでおすすめ。ちなみにExcelでは基本的に大文字小文字が区別されない。
テーブル名はいつでも変更できるが、Power QueryやPower Automateなどのツールはテーブル名の文字列で参照するため、後からExcelでテーブル名を変えるとツール側も都度修正が必要になる。したがって、それらツールの運用を開始する前には確定しておく必要がある。
ブック中に存在するテーブル名は、以下のいずれかから一元管理することもできる。

  • 「数式」タブ「定義された名前」、もしくはCtrl + F3名前の管理
  • ステータスバーのシート名をクリック、もしくは「表示」タブ「表示」のナビゲーションAlt → W → K

テーブル上での選択や移動

テーブル専用の選択や移動の方法が用意されている。詳細はここでは省くが、使えばすぐに慣れるだろう。

テーブルの参照

マウスで参照先を選択すれば自動的に構造化参照になる。自力でキーボードから入力する場合は支援機能が使える。

おわりに

テーブル機能のメタ的な意義

これまで見てきたように、テーブル機能を使おうとすると「テーブルは1行のヘッダーをもつ」「テーブル内ではセル結合できない」など、RDBのテーブルに準じた制約が課される。また、正しい意義が理解されれば、自動的にRDBの概念の一部も理解されたことになる。さらに、テーブル機能の魅力に気付いたユーザーはRDBについて自発的に調べるようになるだろう。したがって、テーブル機能が世間に広まれば、自然と神Excelが減少し、きれいなデータが世の中に増えていくのではと筆者は思う。これがこの記事を書いた一番の動機である。

まとめ

  • テーブル機能の本質的な意義は、領域をデータベース構造としてコンピュータに認識させ、データの整理と分析を効率的かつ効果的に行えるようにする機能である
  • テーブル機能を使うと様々なメリットが享受できる。それだけでなく、テーブル機能なしでは実現できないことも増えている
  • テーブル機能を広めることは、世の中の神Excelを減らし、利用性の高いデータを増やすことにつながる
  1. 「カラム」という語は「列」を意味する英単語「column」そのものから来ているが、データベース用語としてカタカナの「カラム」が定着しており、「列」よりも抽象的な、データベースの構造上の概念を指す場合が多い。ここでもそれに従って、テーブルについていうときは「カラム」と呼び、シートのセル範囲については区別のために「列」と呼ぶことにする。

  2. テーブルの外からも@は使えるが、その場合は「自身のレコード」ではなく単に「同じ行」という意味しかなく、誤りの元になるので避けたほうが良い。

  3. 同様のロジックだがもっとスマートに書ける機能が導入される予定らしい。

  4. リボンメニューからも操作できるが、表現が誤解を招くので推奨しない。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2