INDIRECT関数について①
LEVEL 8 の終盤、もう1つの 動的参照 の関数 ── INDIRECT関数(インダイレクト関数) に進みます。
「インダイレクト」は、英語で「間接的な、直接ではない」という意味。文字通り、「セル参照を間接的に行う」 関数です。
OFFSET(レッスン072・073)は「基準セルからの位置をずらして範囲を指す」関数でした。INDIRECT はアプローチがまったく違います。
INDIRECT は、「文字列」をセル参照として解釈する関数 です。
たとえば、セルに "B2" という 文字列 が入っているとき、それを「B2セルの値」として扱える ── そんな魔法のような働きをします。
最初は「文字列をセル参照?」とイメージしにくいかもしれません。けれども、これが分かると、シート名を変数のように扱う、ドロップダウンで参照範囲を切り替える といった、従来の関数では難しかった仕組み が作れるようになります。

INDIRECT関数の構文
=INDIRECT(参照文字列, [a1])
- 参照文字列 :セル参照を表す 文字列(例:
"B2"、"Sheet2!A1") - a1 :参照方式の指定。TRUE または省略 で A1形式、FALSE で R1C1形式(ほぼ使いません)
この第2引数はほぼ省略するので、実質1引数の関数 と考えて大丈夫です。

まずは「ただの参照」から
INDIRECT のいちばん基本的な使い方から見ていきましょう。
:::excel
A1=データ
A2=100
A3=200
A4=300
:::
C1セルに、A2をダブルクォーテーションで囲って、文字列として引数に入れます。
=INDIRECT("A2")
結果:100
これは、
=A2
と書いたのと まったく同じ結果 です。
「じゃあ、わざわざ INDIRECT を使う意味はないじゃないか」── そう思いますよね。確かに、この書き方には意味がありません。INDIRECT のすごさは、ここからです。
「文字列でセル番地を組み立てる」
INDIRECT の本領は、文字列を組み合わせてセル番地を作れる ところにあります。
たとえば、
- B1 セルに「A」と入力
- B2 セルに「3」と入力
このとき、
=INDIRECT(B1 & B2)
- B1 と B2 を & で連結 → "A3" という文字列ができる
- INDIRECT がそれをセル参照として解釈 → A3 の値
結果:200(A3の値)

ここがポイント。B1 や B2 の値を切り替えるだけで、参照先のセルが変わる ──「変数のようにセルを切り替えられる」 のです。
何が嬉しいのか
少し抽象的なので、もう少し実用例を見てみましょう。
「A列の何番目のセルを見るか」を、別のセルで指定できるようにしたいケース。
E1セルに 見たい行番号 を入力(例:3)。F1セルに、
=INDIRECT("A" & E1)
- "A" と "3" を連結 → "A3"
- INDIRECT が解釈 → A3 の値
結果:200
E1 を「2」に変えれば 100、「4」に変えれば 300 が返ります。

「入力欄に番号を入れると、対応する行のデータが出る」── 簡易的なルックアップ機能が、INDIRECT 1つで作れます。
もちろん XLOOKUP(レッスン051)や INDEX(レッスン054)で同じことはできます。ただ、INDIRECT は 「セル番地そのものを文字列として組み立てる」 という、まったく違う発想で動いていることが伝わるはずです。
別シートのセルを動的に呼び出す
INDIRECT がいちばん輝くのは、シート名を切り替えて参照したい ときです。
たとえば、「月別売上」というワークブックがあり、シートが「2026年1月」「2026年2月」「2026年3月」……と月別に分かれているとします。
それぞれのシートには、同じ位置に 月の合計 が入っているとしましょう(例:各シートの B10 セル)。
「集計シートで、月を切り替えると、その月の合計が出る」── そんな仕組みを INDIRECT で作れます。
集計シートの C2 に 見たい月のシート名(例:「2026年2月」)を入力。出力セルに、
=INDIRECT("'" & C2 & "'!B10")
- "'2026年2月'" と "!B10" を連結 → '2026年2月'!B10 という文字列
- INDIRECT が解釈 → そのシートの B10 セルの値
結果:2026年2月シートの B10 セルの値

ここで シート名を囲っている「'」(シングルクォーテーション) に注目してください。
シート名に スペースや数字、日本語 が含まれている場合、Excel は自動的に 'シート名'!セル番地 という形で囲みます。INDIRECT でも、安全のために常にシート名を「'」で囲んでおく のが定石です。
A1 を「2026年3月」に変えれば、B1 も自動で切り替わる
これが、INDIRECT を使う最大の理由です。
A1 のシート名を切り替えるだけで、参照先が自動で変わる。シートが12個(1年分)あっても、集計シートは1つで済みます。
XLOOKUP や VLOOKUP では、シートをまたぐとどうしても「シートを開いて、範囲を選んで、また戻ってくる」操作が必要になります。シート名を動的に切り替える、これは INDIRECT にしかできない芸当です。
エラーになりやすいポイント
INDIRECT は強力ですが、エラーが出やすい 関数でもあります。
① シート名のスペル間違い
A1 に「2026年2月」と入力したいところを「2026年02月」と書いてしまうと、当然ながらシートが見つからず、#REF! エラーが出ます。
② シート名にスペースや特殊文字
「売上 2026」のようにスペースが入る場合、必ず ' で囲んでください。囲わないとエラーになります。
③ ブックを閉じている別ファイル参照
INDIRECT は、閉じている別ブックのセル を参照できません。VLOOKUP や XLOOKUP は閉じていても参照できますが、INDIRECT だけは「参照先のブックが開かれている」必要があります。これは盲点になりがち。
④ シート名が削除・変更された場合
参照先のシート名を変更しても、INDIRECT は 追随しません(普通のセル参照なら自動更新されます)。文字列ベースの参照なので、変更を Excel が検知できないのです。
「シート名は最初に確定したものを変えない」── 運用ルールとして大事になります。
INDIRECT は揮発性関数
OFFSET と同じく、INDIRECT も 揮発性関数 です。
レッスン072でも触れましたが、揮発性関数は ファイル内のどこかが変わるたびに、すべての INDIRECT が再計算 されます。
- 大量のセルで使うとファイルが重くなる
- 動的な仕組みが本当に必要な箇所だけに絞る
これが原則。固定の参照で済む箇所には、わざわざ INDIRECT を使わないでください。
まとめ
- INDIRECT は 文字列を「セル参照」として解釈する 関数
- 構文:=INDIRECT(参照文字列)(第2引数はほぼ省略)
- 文字列を & で組み立てれば、参照先を動的に切り替えられる
- 別シートを呼び出すときは
"'" & シート名 & "'!セル番地"の形が安全 - シート名のスペル・閉じたブック・シート名変更 に弱い
- INDIRECT も 揮発性関数。使いすぎ注意
次回は、INDIRECT の本領発揮編。複数シートの集計、名前の定義との組み合わせ、ドロップダウンの連動(2段階リスト) など、INDIRECT が圧倒的に強い実用パターンを紹介します。
ショートカット
※このレッスンに対応するショートカットはありません。