概要
「A 列、B 列って書くと、あとで列を挿入したときにずれる…」
「列番号じゃなくて、“列名”で参照したい」
そのための仕組みが 構造化参照(テーブル参照) です。
テーブルとして範囲を登録しておけば、=SUM(売上表[金額]) のように、
「表名+列名」でセル範囲を指定できる ようになります。
列を挿入・削除しても式が壊れにくく、
数式も読みやすくなるので、実務でのメリットはとても大きいです。
構造化参照を使う準備(テーブル化)
テーブルに変換する手順のイメージ
- データ範囲(見出し行+データ)を選択します(例:A1:D100)。
- Ctrl+T(または「挿入」タブ → テーブル)。
- 「先頭行をテーブルの見出しとして使用する」にチェックを入れて OK。
- できたテーブルに、デザインタブから名前を付けます(例:
売上表)。
これで、
- 見出し行:テーブルの「列名」
- テーブル全体:
売上表
という状態になり、構造化参照が使えるようになります。
構造化参照の基本の形
列名で参照する書き方
たとえば、テーブル名が 売上表 で、列名が
「日付」「商品」「数量」「金額」だとします。
このとき、構造化参照はこんな形をしています。
テーブル全体=売上表
特定の列(データ部分)=売上表[金額]
(見出しを除いた「金額」列のデータ全体)
特定の列(見出しも含む)=売上表[[#すべて],[金額]]
特定の列(見出し行だけ)=売上表[[#見出し],[金額]]
自分が今いる行の「金額」セル(行方向の構造化参照)=[@金額]
特に良く使うのは、
- 列全体:
売上表[金額] - 自分の行:
[@金額]
この 2 つです。
列名で合計・平均を出す(基本テンプレ)
指定列を列名で SUM・AVERAGE
テーブル 売上表 の「金額」列の合計を出すとき、
従来の参照だと、
=SUM(D2:D100)
となりますが、構造化参照なら、
=SUM(売上表[金額])
と書けます。
平均値なら、
=AVERAGE(売上表[金額])
最大値なら、
=MAX(売上表[金額])
のように、「どの列か」が数式だけで明確に分かる のが大きなメリットです。
列を追加しても「金額」列である限り、そのまま追いかけてくれます。
行の中で「その行の列名」を参照する
「[@列名]」で自分の行の値を取る
テーブルの中のセルに数式を書くとき、[@列名] という形で「自分が今いる行のその列」を参照できます。
例えば 売上表 に、
「数量」「単価」「金額」の3列があるとします。
「金額」列のセル(例:売上表[金額] の行)に、
次の式を書いたとします。
=[@数量]*[@単価]
すると、
- その行の「数量」セル × その行の「単価」セル
- テーブル全行に自動コピー
- 行を追加しても新しい行にも自動で式が入る
という動きをしてくれます。
セル番地で書くと、
=C2*D2
のようになりますが、列の順番が変わると壊れます。
構造化参照なら、列の並べ替えにとても強い 数式になります。
構造化参照 × XLOOKUP / SUMIF など
XLOOKUP で列名参照
テーブル 商品マスタ に
「商品コード」「商品名」「単価」の列があるとします。
商品コード(セル F2)から、商品名を取得したい場合、
=XLOOKUP(
F2,
商品マスタ[商品コード],
商品マスタ[商品名],
"未登録"
)
と書けます。
従来のように A2:A100 や B2:B100 と書かず、
列名だけで「役割が分かる」式 になるのがポイントです。
SUMIF で列名参照
テーブル 売上表 に
「商品コード」「数量」「金額」があるとして、
商品コードが F2 の行の「金額」を合計したい場合は、
=SUMIF(売上表[商品コード],
F2,
売上表[金額])
のように書けます。
ここでも、テーブル列名だけ見れば
「何を条件に」「何を合計しているか」が一目瞭然です。
よくあるつまずきとコツ
テーブル名・列名がうまく出てこない
構造化参照は、基本的に「セルをクリックして選ぶ」と自動で出てきます。
無理に手入力しようとせず、
- イコール
=を打つ - テーブル内のセルや列見出しをクリックする
ことで式を作るのがおすすめです。
「[@列名]」が勝手に出てくる理由
テーブル内で列をクリックすると、
自動的に「この行のこの列」という意味で [@列名] が挿入されます。
テーブルの外で列をクリックすると、テーブル名[列名] の形になります。
「行の中(テーブル内)なら @ がつく」と覚えておけば OK です。
列名を変えると式も変わる
テーブルの見出し行(列名)を変更すると、
構造化参照の式の列名も自動で更新されます。
「列名を変えたら数式が壊れる」という心配がないのも、構造化参照のメリットです。
例題
問題1
範囲 A1:D100 をテーブルに変換し、テーブル名を「売上表」としました。
列は左から順に「日付」「商品」「数量」「金額」です。
「金額」列の合計を求める式を、構造化参照で書いてください。
=SUM(売上表[金額])
問題2
テーブル「売上表」に「数量」「単価」「金額」の列があります。
「金額」列のセルに、
「その行の数量×単価」で金額を計算する式を、構造化参照で書いてください。
=[@数量]*[@単価]
問題3
テーブル「商品マスタ」に
「商品コード」「商品名」「単価」の列があります。
セル F2 の商品コードから、商品名を取得する XLOOKUP の式を、構造化参照で書いてください。
=XLOOKUP(F2,
商品マスタ[商品コード],
商品マスタ[商品名],
"未登録")
問題4
テーブル「売上表」に
「商品コード」「数量」「金額」の列があります。
セル F2 の商品コードについて、「金額」を合計する SUMIF の式を、構造化参照で書いてください。
=SUMIF(売上表[商品コード],
F2,
売上表[金額])
問題5
テーブル「売上表」に
「日付」「商品」「数量」「単価」「金額」の列があります。
「金額」列のセルに、
「数量×単価」で金額を計算し、行を追加しても自動で式が適用されるようにしたいです。
構造化参照で書く式を示してください。
=[@数量]*[@単価]
まとめ
構造化参照は、
テーブル名[列名]で「列名で参照」できる[@列名]で「その行の値」を参照できる- 列の追加・削除・並び替えに強い
- 数式を見ただけで“意味”が分かる
という、実務には欠かせない仕組みです。
まずは次の 2 つが自然に使えるようになることを目標にしてみてください。
=SUM(テーブル名[列名]) ' 列名で合計
=[@列名1]*[@列名2] ' 行の中で列名参照
ここができるようになると、
XLOOKUP・SUMIF・FILTER など、
どんな関数も「列名ベース」で読みやすく・壊れにくく書けるようになっていきます。
