Excel関数 逆引き集 | 表の列名で参照 → 構造化参照

Excel VBA Excel
スポンサーリンク

概要

「A 列、B 列って書くと、あとで列を挿入したときにずれる…」
「列番号じゃなくて、“列名”で参照したい」

そのための仕組みが 構造化参照(テーブル参照) です。

テーブルとして範囲を登録しておけば、
=SUM(売上表[金額]) のように、
「表名+列名」でセル範囲を指定できる ようになります。

列を挿入・削除しても式が壊れにくく、
数式も読みやすくなるので、実務でのメリットはとても大きいです。


構造化参照を使う準備(テーブル化)

テーブルに変換する手順のイメージ

  1. データ範囲(見出し行+データ)を選択します(例:A1:D100)。
  2. Ctrl+T(または「挿入」タブ → テーブル)。
  3. 「先頭行をテーブルの見出しとして使用する」にチェックを入れて OK。
  4. できたテーブルに、デザインタブから名前を付けます(例:売上表)。

これで、

  • 見出し行:テーブルの「列名」
  • テーブル全体:売上表
    という状態になり、構造化参照が使えるようになります。

構造化参照の基本の形

列名で参照する書き方

たとえば、テーブル名が 売上表 で、列名が
「日付」「商品」「数量」「金額」だとします。

このとき、構造化参照はこんな形をしています。

テーブル全体
=売上表

特定の列(データ部分)
=売上表[金額]
(見出しを除いた「金額」列のデータ全体)

特定の列(見出しも含む)
=売上表[[#すべて],[金額]]

特定の列(見出し行だけ)
=売上表[[#見出し],[金額]]

自分が今いる行の「金額」セル(行方向の構造化参照)
=[@金額]

特に良く使うのは、

  • 列全体:売上表[金額]
  • 自分の行:[@金額]

この 2 つです。


列名で合計・平均を出す(基本テンプレ)

指定列を列名で SUM・AVERAGE

テーブル 売上表 の「金額」列の合計を出すとき、
従来の参照だと、

=SUM(D2:D100)

となりますが、構造化参照なら、

=SUM(売上表[金額])

と書けます。

平均値なら、

=AVERAGE(売上表[金額])

最大値なら、

=MAX(売上表[金額])

のように、「どの列か」が数式だけで明確に分かる のが大きなメリットです。

列を追加しても「金額」列である限り、そのまま追いかけてくれます。


行の中で「その行の列名」を参照する

「[@列名]」で自分の行の値を取る

テーブルの中のセルに数式を書くとき、
[@列名] という形で「自分が今いる行のその列」を参照できます。

例えば 売上表 に、
「数量」「単価」「金額」の3列があるとします。

「金額」列のセル(例:売上表[金額] の行)に、
次の式を書いたとします。

=[@数量]*[@単価]

すると、

  • その行の「数量」セル × その行の「単価」セル
  • テーブル全行に自動コピー
  • 行を追加しても新しい行にも自動で式が入る

という動きをしてくれます。

セル番地で書くと、

=C2*D2

のようになりますが、列の順番が変わると壊れます。
構造化参照なら、列の並べ替えにとても強い 数式になります。


構造化参照 × XLOOKUP / SUMIF など

XLOOKUP で列名参照

テーブル 商品マスタ
「商品コード」「商品名」「単価」の列があるとします。

商品コード(セル F2)から、商品名を取得したい場合、

=XLOOKUP(
    F2,
    商品マスタ[商品コード],
    商品マスタ[商品名],
    "未登録"
)

と書けます。

従来のように A2:A100B2:B100 と書かず、
列名だけで「役割が分かる」式 になるのがポイントです。

SUMIF で列名参照

テーブル 売上表
「商品コード」「数量」「金額」があるとして、
商品コードが F2 の行の「金額」を合計したい場合は、

=SUMIF(売上表[商品コード],
       F2,
       売上表[金額])

のように書けます。

ここでも、テーブル列名だけ見れば
「何を条件に」「何を合計しているか」が一目瞭然です。


よくあるつまずきとコツ

テーブル名・列名がうまく出てこない

構造化参照は、基本的に「セルをクリックして選ぶ」と自動で出てきます。
無理に手入力しようとせず、

  1. イコール = を打つ
  2. テーブル内のセルや列見出しをクリックする

ことで式を作るのがおすすめです。

「[@列名]」が勝手に出てくる理由

テーブル内で列をクリックすると、
自動的に「この行のこの列」という意味で [@列名] が挿入されます。
テーブルの外で列をクリックすると、テーブル名[列名] の形になります。

「行の中(テーブル内)なら @ がつく」と覚えておけば OK です。

列名を変えると式も変わる

テーブルの見出し行(列名)を変更すると、
構造化参照の式の列名も自動で更新されます。

「列名を変えたら数式が壊れる」という心配がないのも、構造化参照のメリットです。


例題

問題1

範囲 A1:D100 をテーブルに変換し、テーブル名を「売上表」としました。
列は左から順に「日付」「商品」「数量」「金額」です。

「金額」列の合計を求める式を、構造化参照で書いてください。

=SUM(売上表[金額])

問題2

テーブル「売上表」に「数量」「単価」「金額」の列があります。
「金額」列のセルに、
「その行の数量×単価」で金額を計算する式を、構造化参照で書いてください。

=[@数量]*[@単価]

問題3

テーブル「商品マスタ」に
「商品コード」「商品名」「単価」の列があります。
セル F2 の商品コードから、商品名を取得する XLOOKUP の式を、構造化参照で書いてください。

=XLOOKUP(F2,
         商品マスタ[商品コード],
         商品マスタ[商品名],
         "未登録")

問題4

テーブル「売上表」に
「商品コード」「数量」「金額」の列があります。
セル F2 の商品コードについて、「金額」を合計する SUMIF の式を、構造化参照で書いてください。

=SUMIF(売上表[商品コード],
       F2,
       売上表[金額])

問題5

テーブル「売上表」に
「日付」「商品」「数量」「単価」「金額」の列があります。
「金額」列のセルに、
「数量×単価」で金額を計算し、行を追加しても自動で式が適用されるようにしたいです。

構造化参照で書く式を示してください。

=[@数量]*[@単価]

まとめ

構造化参照は、

  • テーブル名[列名] で「列名で参照」できる
  • [@列名] で「その行の値」を参照できる
  • 列の追加・削除・並び替えに強い
  • 数式を見ただけで“意味”が分かる

という、実務には欠かせない仕組みです。

まずは次の 2 つが自然に使えるようになることを目標にしてみてください。

=SUM(テーブル名[列名])     ' 列名で合計
=[@列名1]*[@列名2]        ' 行の中で列名参照

ここができるようになると、
XLOOKUP・SUMIF・FILTER など、
どんな関数も「列名ベース」で読みやすく・壊れにくく書けるようになっていきます。

タイトルとURLをコピーしました