さくっとエクセレートさくっとエクセレート
PR

別シートでもOK!テーブル参照の数式と特徴を解説【Excel構造化参照】

Thumbnail for 別シートでもOK!テーブル参照の数式と特徴を解説【Excel構造化参照】

本記事では、Excel(エクセル)構造化参照(テーブル参照) の数式の使い方と特徴を解説します。具体的には、構造化参照の数式の書き方や、どのような場面で活用すべきかについて述べます。

Excelのバージョン

本記事は、Excel 2024(ローカルまたは共有フォルダでの運用) を前提に作成しています。
環境によっては、UIなどの細かな点が異なる場合があります。

※ 本記事の見出しでは「エクセル」本文では「Excel」と表記を統一しています。

ポイント|構造化参照(テーブル参照)の基本と注意点

【構造化参照(テーブル参照)の基本形】

テーブル名[[特殊項目指定子],[列指定子]]
excel

※ 同一ブック内であれば、別シート の参照もそのままの数式で可能

数式の詳細は後ほど

【よく使う形】

参照場所数式備考
列X の全体テーブル1[列X]同じテーブル内ならテーブル名省略可
列X の見出しテーブル1[[#見出し],[列X]]
列X 内の同じ行テーブル1[@列X]
別ブックのテーブル列X'ブック名.xlsx'!テーブル1[列X]一時使用に限定する※

※ リンク切れや参照エラーの原因となるため、本格的な運用の場合はPower Queryによる参照を推奨

【条件付き書式、入力規則で使用するとき】
「名前の定義」「INDIRECT関数」で仲介する

【うまく動かないときの主な原因】

症状対処
セルの数式入力中に構造化参照が自動入力されないExcelオプションで「テーブル名の使用」をONに
条件付き書式、入力規則でエラー名前の定義(またはINDIRECT関数)を使う
うまく動かない(その他)よくあるエラー・Q&A を参照

前知識|構造化参照とは

構造化参照 は、数式内で テーブル内のデータを参照 する方法の一つです。通常の セル参照 とは異なる記述をします。

  • セル参照: セル番地 を指定。
    (例:A1:A5
  • 構造化参照: テーブル名列名 を指定。
    (例:テーブル1[列X]

手順|構造化参照の使用方法

STEP1

テーブルを準備

構造化参照を利用するには、参照元となるデータがテーブル形式である必要があります。テーブルになっていない場合は、以下の手順で変換します。

» テーブルの扱い方の詳細はコチラ

  1. テーブルの作成:テーブルにしたいセル範囲を選択し、「挿入」タブの「テーブル」ボタンを選択後、ダイアログでOKを押します。

    テーブルの作成
  2. テーブル名の設定(任意)「テーブルデザイン」タブの「テーブル名」欄に、識別しやすいテーブル名を入力します(例:商品リスト

    テーブル名の設定
  3. 必要に応じて集計行を表示設定(任意)テーブルの最終行に「集計行」を追加する場合は、「テーブルデザイン」タブで「集計行」にチェックを入れます。

    集計行を表示設定
STEP2

数式を記入

セルに構造化参照を用いた数式を入力することで、テーブル内のデータを参照できます。構造化参照では、参照するテーブルの テーブル名列名 を指定することで、「列全体」が参照可能です(例:商品リスト[商品名]数式の詳細については、後ほど解説します。

数式を記入

数式の自動入力:セル選択とオートコンプリート

構造化参照の数式は、手入力しなくても以下の2つの方法で自動入力できます。

  • セル選択:数式入力中にカーソル移動やクリックでテーブルのセルを選択すると、構造化参照の式が自動で入力されます。
  • オートコンプリート:数式入力中にテーブル名や列名の一部を記入すると、テーブル名や列名の候補がリスト表示されます
    (リストの開閉: Alt +
    リストから選択(Enter / Tabすることで、テーブル名やリスト名が挿入可能です。
吉峰
吉峰

コピペ(コピー&ペースト)とオートフィルでは挙動が変わります(詳細は後ほど

詳細|構造化参照の数式

構造化参照の数式
 

数式の構文規則

構造化参照の数式は、以下の要素で構成されます。

テーブル1テーブル1テーブル1テーブル1[ [#見出し], [X] ][ [#見出し], [X] ]テーブル1テーブル1[ #見出し ] [ #見出し ] テーブル1テーブル1[ X ] [ X ] [ @X ] [ @X ] 【 省略形 】【 省略形 】【 基本形 】【 基本形 】[#すべて], [#データ], [#見出し], [#集計], @[#すべて], [#データ], [#見出し], [#集計], @テーブル指定子テーブル指定子テーブル名テーブル名特殊項目指定子特殊項目指定子列指定子列指定子
  • テーブル名参照するテーブルの名前を指定。参照先と参照元が同じテーブルの場合、省略可能。

  • テーブル指定子テーブル内の特定の範囲を指定。特殊項目指定子列指定子 から構成され、どちらか一方のみの指定も可能(その場合、角括弧とカンマを省ける)特殊項目指定子#データで「列指定子なし」の場合、テーブル指定子自体を省略可能。

    • 特殊項目指定子テーブル内の特定の行(#見出し#データ#集計など)を指定(詳細は後述
    • 列指定子テーブル内の列名を指定。
 

数式の特殊項目指定子

数式の特殊項目指定子

テーブル内で参照する を指定するための指定子です。

指定子参照範囲・意味備考
#すべてテーブル全体
#データデータ行特殊項目指定子を省略した場合と同等で、使用頻度は低め。
#見出し見出し行
#集計集計行集計行が非表示の場合、#REF!エラーとなる。
@自身と同じ行テーブル指定子内の角括弧とカンマは不要。

"@" を使った構造化参照式の例

  • 「自身と同じ 行全体を指定する例 :
    テーブル名[ @ ]
  • 「自身と同じ 行の特定の列 (列名に特殊文字を 含まない含まないを指定する例 :
    テーブル名[ @見出し名 ]
  • 「自身と同じ 行の特定の列 (列名に特殊文字を 含む含むを指定する例 :
    テーブル名[ @[見出し 名] ](角括弧で見出し名を囲む)
 

別シート参照時の数式

別のシートにあるテーブルを参照する場合、参照先のシートが別のブック(ファイル)にあるときは、数式にファイル名を記述する必要があります。同じ同じ ブック内であれば、参照するテーブルが どのシートにあっても数式は変わりません。

  • 同一ブックの場合
    数式は変化しない。
    同じブック内であれば、テーブル名を指定するだけでどのシートからでも参照可能。
  • 別ブックの場合
    数式の先頭に'ブック名.xlsx'!を追加する
    (例:='ブック名.xlsx'!テーブル名[見出し名]
吉峰
吉峰

同一ブック内であれば、シート名は不要です。テーブル名はブック内で一意であるため、どのシートからでも テーブル名[列名] の形式だけで参照できます。

外部参照での数式の使用は非推奨

外部参照(別のブックの参照)を行う場合、
セル参照構造化参照 かに関わらず、数式の使用はあまりオススメしません。
参照元のブックを開かずにデータを更新でき、リンク切れも起こりにくい Power Query によるテーブル参照の利用が良いでしょう。

» Power Queryによる外部参照の詳細はコチラ

特徴|構造化参照のメリット・デメリット

構造化参照には、セル参照にはない独自のメリットがある一方、苦手な操作もあります。用途に応じて使い分けることが重要です。

 

✅ メリット:自動拡張と可読性の向上

  • 参照範囲が自動で拡張される参照元のテーブルにデータを追加しても、参照側の範囲が自動で広がるため、数式を修正する手間が省けます。セル位置に依存しない数式を作成するときに役立ちます。

  • 可読性が向上する「テーブル名」と「見出し名」を記述して参照場所を指定するため、数式の可読性が向上します。セル参照と比較して、数式を見ただけで何を参照しているか判別しやすくなります。

吉峰
吉峰

外部参照(別ブックの参照) に限っては、「リンク切れしにくい」というメリット があります。

構造化参照は外部参照のリンク切れに強い

外部参照(別ブックの参照)ないない 場合は、通常のセル参照を使っていたとしても、「シート名」や「セル位置」を変更したときに Excelが数式を自動修正 してくれますが、
外部参照の場合はしてくれません。
外部参照 の場合は、構造化参照を使うことで「シート名」や「セル位置」の変更に影響されず、切れにくいリンク が作れます。

ただし、数式数式 による外部参照は 更新時に参照ブックを開く必要があります。
数式でなく Power Query を使うことで、この欠点なしで構造化参照の「リンク切れしにくい」というメリットを最大限に活用 できます。

 

❌ デメリット:細かい参照位置の指定が苦手

  • マウス操作で参照場所を変更できないセル参照では数式編集中に 参照位置や範囲をマウスのドラッグで変更 できますが、構造化参照ではできません。

  • 参照場所の固定・移動の切り替えが苦手数式を別のセルに複製する際、参照位置を「( 絶対参照 のように)固定するか」「( 相対参照 のように)移動するか」を細かく設定するのが苦手です。

使いどころ

構造化参照は、「データを追加しても、参照範囲を自動で拡張させたい」場合に 便利です(詳細は前述のメリットの項目を参照)

例 :
=SUM(テーブル1[列X])列Xにデータを追加しても、自動で参照範囲が拡張される

「自動拡張」機能が不要な場合は、 無理に構造化参照を使用する必要はなくセル参照を使用しても問題となることは少ないでしょう。

吉峰
吉峰

基本的には、セル選択した際に自動で挿入される方式を使用すればよいでしょう。

小技1|行指定(特定の行を参照する)

構造化参照では「テーブルの何行目か」を直接数字で指定することはできません。関数を組み合わせて、目的別に以下の方法を使い分けます。

参照場所数式例備考
(見出し)テーブル1[[#見出し],[列X]]
1行目(先頭行)INDEX(テーブル1[列X], 1)
n行目INDEX(テーブル1[列X], n)n は任意の数値
最終行INDEX(テーブル1[列X], ROWS(テーブル1))データ追加に追従する
吉峰
吉峰

テーブル1[列名][1] のような書き方はできません。

小技2|参照する行・列を固定(絶対参照と相対参照)

列の固定と行の固定では、それぞれ方法が異なります。

 

列の固定

を固定する方法には以下の2つがあります。

  1. オートフィルでなくコピペを使う
  2. [列名]:[列名] 形式で記述する

1. オートフィルでなくコピペを使う

構造化参照の数式を横方向へ複製する場合、操作方法によって参照場所が「相対参照」か「絶対参照」かの挙動が変わります。

  • オートフィル(相対参照的な挙動)セルの右下を横方向にドラッグして複製すると、参照する列が右へ一つずつずれます。
  • コピー&ペースト(絶対参照的な挙動)セルを Ctrl + c でコピーし、別のセルへ Ctrl + v で貼り付けると、参照する列は固定されたまま保持されます。
吉峰
吉峰

マウスで手軽に複製したいときはオートフィルが便利ですが、「固定して特定の列を参照したい」という場合は、一旦コピペで数式を広げるのが最も簡単な回避策です。

2. [列名]:[列名] 形式で記述する

オートフィルで列がずれるのを防ぎたい場合、[[列名]:[列名]] という記法を使うことで、数式上で列を固定(絶対参照に相当)できます。

記法挙動
テーブル名[列名]オートフィルで列がずれる(相対参照相当)
テーブル名[[列名]:[列名]]オートフィルでも列が固定される(絶対参照相当)

例)VLOOKUPの範囲指定で、オートフィルしても検索列がずれないようにする :

=VLOOKUP(A2, テーブル1[[商品名]:[価格]], 2, FALSE)
excel

F4キーでは切り替わらない

セル参照では F4 キーで絶対参照・相対参照を切り替えられますが、
構造化参照では F4キーは機能しません
[[列名]:[列名]] の記法を手動で入力する必要があります。

 

行の固定

を固定する場合は、目的に応じて以下の関数・記法を使い分けます。

  • 絶対参照的な挙動(固定) INDEX関数で、先頭行からの位置 を指定する(詳細は前述
    • 例) INDEX([列X],1)列X1行目 のセル。
  • 相対参照的な挙動(同じ行以外) OFFSET関数で、自身の行を基準とした相対的な位置 を指定する。
    • 例) OFFSET([@列X],-1,)列X「自身の行」から1つ上 のセル。
  • 相対参照的な挙動(同じ行) @ 記法で、自身と同じ行 を指定する。
    • 例) [@列X]列X自身と同じ行 のセル。
吉峰
吉峰

構造化参照は、行と列を組み合わせた細かな参照位置の指定をしようとすると煩雑になります。累計値の計算 のような 複雑な計算には不向き です。

応用1|条件付き書式、入力規則での使い方

条件付き書式入力規則 では 仕様上、構造化参照を直接使用できませんしかし、名前の定義INDIRECT関数 を経由することで使用可能になります。

対処法は以下の2つです。

  • 対処法①:名前の定義を経由する
  • 対処法②:INDIRECT関数を使う

直接入力するとエラーが発生

条件付き書式、入力規則の入力欄は、構造化参照(テーブル名[列名]の形式)
直接受け付けない仕様です。
直接入力すると、以下のいずれかのエラーが発生します。

この数式には問題があります。
...(中略)...
有効な数式を入力してください。
この名前の構文が正しくありません。
...(中略)...

構造化参照を使うメリット

条件付き書式や入力規則に構造化参照を使うと、
通常のセルでの数式と同様に、
行追加に自動対応 するというメリットがあります。

参照するテーブルが シートにある場合に有効 です。
※ 参照するテーブルが 同一シートの場合は、通常のセル参照でも参照範囲が自動調整 されます(ただしテーブル化は必須)

 

対処法①:名前の定義を使う

条件付き書式や入力規則で構造化参照を使う方法の1つが、「名前の定義」の機能を経由することです。数式タブの 名前の定義 で、テーブル列に名前を付けて列の範囲を定義し、使用します。

STEP1

名前の定義のダイアログを開く

数式タブの 名前の定義 を選択します。

名前の定義のダイアログ
STEP2

名前と参照範囲を設定する

  • 名前 : 任意の名前を入力例)A列
  • 参照範囲 : 構造化参照の数式を入力例)=テーブル1[A]
名前と参照範囲を設定する
STEP3

条件付き書式、入力規則で定義した名前を使う

条件付き書式や入力規則の数式欄で、Step2で定義した名前を使った数式が使えます。
例)=COUNTIF(A列, B2)=0B2セルが テーブル1A列に存在しない場合、背景色を赤くする

条件付き書式で名前を使う
 

対処法②:INDIRECT関数を使う

条件付き書式や入力規則で構造化参照を使う2つ目の方法は、「INDIRECT関数」を使う ことです。

形式書き方
通常の構造化参照=テーブル名[列名]
INDIRECT関数を経由=INDIRECT("テーブル名[列名]")

例)INDIRECT関数を経由して構造化参照を使った数式の例

=COUNTIF(INDIRECT("テーブル1[列X]"), B2)=0
 

比較

名前の定義とINDIRECT関数のどちらを使っても、条件付き書式や入力規則で構造化参照を使えるようになりますが、数式の可読性やパフォーマンスの面から、基本は 名前の定義 がオススメです。参照する列が多い場合や手軽に試したい場合は INDIRECT関数 を使いましょう。

方法特徴使いどころ
名前の定義✅ 数式が短くでき、可読性が高い
✅ テーブル名・列名の変更に自動で追従
❌ 事前登録が必要、列数が多いと管理が煩雑
参照列が少なく、長期運用する場合
INDIRECT関数✅ 事前準備不要で手軽
❌ 揮発性関数のため再計算が増える
手軽に試したい場合や、参照列が多い場合
吉峰
吉峰

参照するテーブルが1つでも、参照する行や列の数が増えると 名前の定義 では設定や管理が手間です。たとえば、テーブルのA、B、C列の3つを参照したい場合、=テーブル1[A]=テーブル1[B]=テーブル1[C]の3つの名前の定義が必要になります。

応用2|関数内での使用例

関数の中で構造化参照を使用する例をいくつか紹介します。

  • VLOOKUP : テーブル内を検索し、該当するデータを取得。
    • データ追加時に検索範囲が自動で拡張される。
    • 例) =VLOOKUP( 検索値, テーブル1, 2, FALSE )
    • ただし、以下のデメリットがある。
      • テーブルの列を入れ替えると、取得列がずれる
      • 検索列はテーブルの左端に限定される

列の入れ替えや検索列の制限に対応する方法

テーブルの列の入れ替えに対応し、検索列がテーブルの左端に限定されないようにするには、
XLOOKUP または MATCH + INDEX 関数を使用します。

  • 例) =XLOOKUP( 検索値, テーブル1[A], テーブル1[B] )
  • 例) =INDEX( テーブル1[B], MATCH( 検索値, テーブル1[A], 0 ) )

XLOOKUPはExcel 2019以降で利用可能です。

  • SUM, AVERAGE, MAX, MINなど : 集計値の算出を行う。
    • データ追加時に計算範囲が自動で拡張される。
    • 例) =SUM( テーブル1[A] )
  • INDEX : 指定範囲 内の内の n番目のセルを取得する。
    • (詳細は前述の「行の固定 / 移動を参照)
    • 例) =INDEX( [列X], 1 )列X1行目のセルを参照
  • OFFSET : 指定範囲 からのからの ±n番目のセルを取得する。
    • (詳細は前述の「行の固定 / 移動を参照)
    • 例) =OFFSET( [@列X], -1, )列Xの「自身の行」から1つ上のセルを参照。
  • INDIRECT : ドロップダウンリストや条件付き書式などで、構造化参照を使用可能にする。
    • 構造化参照の数式を直接使用できない場面 で対応する方法(詳細は応用1を参照)
    • 例) =INDIRECT( "テーブル1[列X]" )テーブル1列Xのリストを参照。
吉峰
吉峰

ドロップダウンリスト(入力規則)条件付き書式 では、構造化参照の数式を直接使用できないため、INDIRECT関数を使用して対応します。

特に、別シートのテーブルを参照する際にINDIRECT関数を使用しないと、参照範囲が自動で拡張されない点に注意が必要です。

よくあるエラー、うまく設定できない場合のQ&A

構造化参照を使う際に、つまずきやすいポイントをまとめました。構造化参照(テーブル参照)がうまく機能しない、またはエラーが出る場合は、以下の表から症状に合うものを確認してください。

症状(Q&A項目)原因対処
Q1. テーブル名が補完されないExcelオプションの設定が無効オプションで「数式でのテーブル名の使用」にチェックを入れる
Q2. テーブル名が認識されない対象が標準範囲(非テーブル)のままCtrl+tなどで範囲を「テーブル」に変換する
Q3. 入力規則、条件付き書式でエラー構造化参照の直接入力が不可(仕様)名前の定義またはINDIRECT関数を経由させて指定する
Q4. 列名のエラースペース・特殊文字・括弧の閉じ忘れ[[列名]] と二重角括弧で囲むかエスケープを行う
Q5. オートフィルで列がずれる単一列指定は相対参照として扱われるオートフィルでなくコピペを使用する、[[列名]:[列名]]形式を使う。
 

Q1. 数式入力中に構造化参照式の自動補完が効かない

Excelの設定で「数式でテーブル名を使用する」が無効になっていると、セル選択やオートコンプリートによる構造化参照の自動補完が効きません。

確認手順 :

  1. ファイルタブのオプション > 数式を選択。
  2. 「数式の処理」セクション内の 「数式でテーブル名を使用する」にチェック が入っているかを確認。
Excelオプションの「数式でテーブル名を使用する」設定画面
 

Q2. セルの数式中で構造化参照(テーブル名)が使えない

セル範囲が「テーブル」として設定されていない(標準の範囲のまま)場合、構造化参照は使えません。

対処法 :
セル範囲を選択し、「挿入」タブの「テーブル」でテーブル化 する。

 

Q3. 入力規則や条件付き書式で構造化参照が設定できない

「データの入力規則」のドロップダウンリスト設定欄や「条件付き書式」の数式欄では、構造化参照(テーブル1[列名]直接入力することはできません。

 

Q4. 列名にカンマや大括弧が含まれるとエラーになる

列名にカンマや大括弧などの特殊文字が含まれる場合、角括弧([ ]が必要になるケースがあります。列名に含まれる大括弧の前には、シングルクォーテーション('でのエスケープも必要です。

=[@重さ]              ← 角括弧、シングルクォーテーションは不要
=[@[重さ '[kg']]]      ← 角括弧、シングルクォーテーションが必要
excel

上記の例のように、同テーブル内での参照では「テーブル名」は省略可能です

 

Q5. オートフィル(数式コピー)をすると列の参照先がずれる

構造化参照をマウスのオートフィルで横方向にコピーすると、セル参照の「相対参照」のように参照列が右へずれてしまいます。

対処法 :

  • オートフィルではなく「コピー&ペースト」を使用する(コピペなら列は固定されます)
  • または[[列名]:[列名]] の形式で記述する。

» 詳細な固定方法(絶対参照)はコチラ

まとめ|構造化参照(テーブル参照)の活用ポイント

本記事では、Excelの構造化参照について、基本的な使い方から応用、メリット・デメリットまでを解説しました。

構造化参照のポイントは以下の通りです。

  • 基本的な数式
    テーブル名[ [特殊項目指定子], [列指定子] ] の形式で記述。
    最もよく使う形は テーブル名[列指定子] で、指定した列のデータが一括で取得可能。
  • 自動拡張の利便性
    構造化参照は、テーブルにデータが追加されても参照範囲が自動的に拡張されるため、
    手動で数式を修正する手間を省ける。データ更新が多い場面で特に有用。
  • セル参照との使い分け
    既存のセル参照を 無理に構造化参照に置き換える必要はない
    自動拡張の機能が不要な場合や、細かな参照位置の調整が必要な場合は、セル参照も有効な選択肢。

構造化参照が使えるようになると、テーブル内のデータをより柔軟かつ効率的に扱えるようになります。特に、テーブルPower Query を組み合わせることで、データベース運用の自動化やデータ転記の効率化が可能となり、データ活用の基盤を構築し、全体的な業務効率化が図れます。