LEVEL 8 テーブルとデータベース的思考 上級
Lesson 074

INDIRECT関数について①

練習用Excelファイル lesson074-practice.xlsx

練習用ファイルは、パソコンからダウンロードしてください。

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 が圧倒的に強い実用パターンを紹介します。


ショートカット

※このレッスンに対応するショートカットはありません。

次のLessonへ Lesson 075 INDIRECT関数について②