エクセルのINDIRECT関数とは?参照先を文字列で指定する使い方と注意点まとめ

「セルの番地を指定して参照する」――Excelでは当たり前のように使う機能ですが、
参照先を文字列で自由に指定できる関数があるのをご存じでしょうか?

それが INDIRECT関数(インダイレクト関数) です。

たとえば「A1セルに“B2”と入力 → そのB2セルを参照」といった、
“間接的な参照”が可能になるのがINDIRECT関数の大きな特徴です。

一見すると難しそうに見えますが、
使い方を理解すれば、範囲を動的に切り替えたり、複数シートを参照したりと活用の幅が一気に広がります。

この記事では、INDIRECT関数の基本から実用例、注意点までをわかりやすく解説します。
これまで「ちょっと難しそう…」と感じていた方も、ぜひこの記事で使い方のコツをつかんでみてください!

目次

INDIRECT関数とは?基本の使い方

INDIRECT(インダイレクト)関数は、セルや範囲を“文字列として”指定し、その参照先の値を取得する関数です。
Excelでは通常、=A1 のように直接セルを指定しますが、INDIRECT関数を使えば、
参照先をセルの中身や関数で動的に変えることが可能になります。


INDIRECT関数の構文

=INDIRECT(参照文字列, [A1形式])
引数 内容
参照文字列 参照したいセル番地や名前付き範囲を文字列で指定(例:”A1″)
[A1形式](省略可) TRUE:A1形式(デフォルト)/FALSE:R1C1形式で指定

例1:文字列でセルを参照する

=INDIRECT("A1")

→ A1セルの値を取得します。
普通に =A1 と書くのと同じ結果ですが、「A1」という文字列として書いている点がポイントです。


例2:セルの中にセル番地がある場合

A1 B1
C1 =INDIRECT(A1)

A1セルに「C1」と入力されていれば、B1の数式 =INDIRECT(A1)C1セルの値を取得します。
このように、セルの中身に応じて参照先を変えることができます。


例3:別のシートを参照する

たとえば A1 に「Sheet1」と入力されているとき:

=INDIRECT("'" & A1 & "'!B2")

Sheet1!B2 のセルを参照します。

シート名にスペースがある場合にも対応するため、’(シングルクォーテーション)で囲むのがポイントです。


A1形式とR1C1形式について(参考)

INDIRECT関数は「A1形式」が基本ですが、FALSE を指定することで「R1C1形式」も使えます。

=INDIRECT("R2C3", FALSE) → セルC2(=C2)を参照

この形式はあまり使われる機会は多くないので、初心者のうちは省略してOKです。


このように、INDIRECT関数は**「文字列として指定した参照先」にアクセスできる関数です。
次章では、この特性を活かした
便利な応用パターン**をご紹介します。

よく使われる応用パターン

INDIRECT関数の魅力は、なんといっても**「参照先を動的に切り替えられる」こと**です。
ここでは、実務で役立つよくある使い方を具体例つきで紹介します。


範囲を動的に指定して集計する

たとえば、合計したい範囲が「A1:A5」「A1:A10」など可変するような場合、INDIRECT関数を使えば範囲を自由に変えられます。

例:

=SUM(INDIRECT("A1:A5"))

→ A1〜A5の合計を求める


セルを使って行数を変える例:

| A1セル:5
| 数式: =SUM(INDIRECT("A1:A" & B1))

→ 「A1:A5」を参照する式になり、行数が変動しても自動対応できます。


シート名を動的に変えて参照する

複数のシートを条件によって切り替えて参照したいときも、INDIRECT関数が便利です。

例:

| A1セルに「Sheet2」
| 数式: =INDIRECT("'" & A1 & "'!B2")

A1の内容をもとに、Sheet2のB2セルを参照

これにより、シート名を手入力せず、ユーザー選択に応じて参照先を切り替えることができます。


名前付き範囲を文字列で指定する

Excelで定義した「名前付き範囲」も、INDIRECT関数を使えば文字列で参照できます。

例:

  • 「SalesData」という名前付き範囲があるとき:

=SUM(INDIRECT("SalesData"))

→ 関数の中で直接使うだけでなく、入力規則やVLOOKUPなどと組み合わせると便利です。


入力規則(プルダウン)と組み合わせる例

「都道府県を選ぶと、その市区町村が表示される」といった連動型ドロップダウンも、INDIRECT関数で実現できます。

例(概要):

  • A1セルで「北海道」を選択

  • B1セルの入力規則で =INDIRECT(A1)

  • 「北海道」という名前の範囲があれば、その内容が表示される


このように、INDIRECT関数を使えばユーザーの入力やセル内容に応じて参照を切り替える柔軟な処理が可能です。
次章では、この便利さの裏にある注意点や落とし穴について解説します。

INDIRECT関数の注意点と落とし穴

INDIRECT関数はとても便利な一方で、他の関数にはない独特のクセや制限もあります。
正しく使うためには、あらかじめ注意すべきポイントを理解しておくことが大切です。


参照先のブックが閉じているとエラーになる

INDIRECT関数は、参照先のファイルが開いていないとエラー(#REF!)になります。

例:

=INDIRECT("'[売上データ.xlsx]1月'!B2")

→ 参照先のブック「売上データ.xlsx」が開いていないと機能しません。

これはVLOOKUPやINDEXとは異なり、INDIRECTが“リアルタイムで中身を見に行く”仕組みのためです。

◆ 補足:INDIRECT関数でファイルが閉じていても表示される理由とは?

通常、INDIRECT関数は「参照先のファイルが開いていないと値を取得できない」という仕様ですが、
一度参照した値が画面に残っている場合もあります。

これはExcelの「計算結果のキャッシュ」が残っているためで、実際には再計算が行われていないだけの状態です。

そのため…

  • 参照先のファイルを閉じたあとでも値が表示される

  • でも、数式を編集したり、F9キーで再計算すると #REF!エラーになる

といったことが起こります。


→ 見えているからといって、必ずしも“使えている”とは限らない点に注意しましょう!


スピルやFILTER関数などとの相性に注意

Excel 365や2021以降では「スピル(複数セルに広がる)」関数が使えますが、INDIRECTで作った範囲はスピル関数にうまく渡せない場合があります。

例(うまくいかない):

=FILTER(INDIRECT("A1:A10"), A1:A10>10)

→ スピル対象の行数と一致していないなどで #VALUE! エラーになることも。

※補足:Excel 365では、FILTER 関数と INDIRECT 関数を組み合わせても正常に動作するケースが多くなっています。
ただし、以下のような条件ではエラーになることがあります:

  • INDIRECT で別シートの範囲を指定している

  • 条件式(例:A1:A10>10)が現在のシートを見ている

この場合、FILTER関数は 「参照範囲」と「条件の範囲」が異なるシートにあることにより #CALC! エラーを返します。

実行結果が見た目には正常に見えても、シートをまたぐ処理には注意が必要です。

条件の範囲(参照先シート)を修正すると、正常に表示されました。


行や列の挿入・削除に対応しない

INDIRECT関数で指定した範囲は「文字列として固定」されているため、他のセル参照のように行列挿入の影響を受けません。

例:

=INDIRECT("A1")

→ A列の前に列を追加しても、参照先は変わらず「A1」のまま
相対的に動いてほしい場面では不便になることもあります


数式トレースや検索が効かない

INDIRECTで参照先を文字列で指定すると、Excelの「参照元のトレース」や検索(Ctrl+F)では追えません。

  • 「このセルはどこを見ているんだろう?」と確認しづらい

  • 検索にも引っかからず、数式の管理が難しくなる場合があります

    ◆補足:見えているのに「検索で見つからない」理由とは?

    Excelでは、FILTER関数などで表示されている値が実際には検索に引っかからないことがあります。
    特に以下のようなケースでは注意が必要です:

    • スピルによって表示された値

    • 数式による動的な表示(FILTER・UNIQUE・SORTなど)

    • 数値として表示されているが、検索は文字列として行われている

    見た目には同じ「11」があっても、検索結果が「見つかりません」となるのは仕様によるものです。
    スピルの結果を検索対象にしたい場合は、コピー → 値貼り付けなどで通常のセルに変換すると対応できます。


名前付き範囲は名前ミスに注意

INDIRECTで名前付き範囲を参照する場合、名前が1文字違うだけでも#REF!になります。

  • 手入力ではなく、**定義済みの名前から選ぶ(数式→名前の管理)**のがおすすめです。


このように、INDIRECT関数はとても柔軟な反面、動作が特殊なぶん誤解やトラブルも起きやすい関数です。
次章では、どんな場面で使うと効果的かを整理してみましょう。

こんなときにINDIRECT関数が便利!

INDIRECT関数は、ややクセがあるものの、使い所を選べば非常に強力なツールになります。
ここでは、実務や日常業務で「これは便利!」と感じやすい活用シーンを紹介します。


ユーザー入力に応じて参照先を切り替えたいとき

たとえば「月別シート」「部署別シート」などがある場合、ユーザーの選択に応じて参照先を自動で切り替えたい場面があります。

例:

  • A1セルに「営業部」と入力

  • B1セルに =INDIRECT("'" & A1 & "'!C2")

「営業部」シートのC2セルを参照
→ シート名を直接いじらなくても、入力次第で自動切り替えが可能です。


集計範囲が変動するとき

データの行数が増減する場合、範囲の終点を動的に変えたいときがあります。

例:

  • B1セルに「10」と入力

  • 数式: =SUM(INDIRECT("A2:A" & B1))

「A2:A10」までの合計を動的に集計できる


入力規則(ドロップダウンリスト)を連動させたいとき

「都道府県を選ぶ → 対応する市区町村を表示」といった連動ドロップダウンは、INDIRECT関数が定番です。

概要:


名前付き範囲を条件によって切り替えたいとき

複数の名前付き範囲(例:年間売上、月間売上など)を条件によって切り替えて処理したいときにもINDIRECTが役立ちます。

=SUM(INDIRECT("売上_" & A2))

→ A2が「2024」なら「売上_2024」という範囲を参照


INDIRECT関数は、**「このセルに何が書いてあるかによって、どこを見るかを変えたい」**というときにとても役立ちます。
使い所を見極めれば、複雑なシート構成もスマートに整理できます。

まとめ|INDIRECTは便利だけど慎重に使おう

INDIRECT関数は、セルや範囲、シート名などを文字列で柔軟に指定できる便利な関数です。
参照先を動的に切り替えたり、名前付き範囲を切り替えたりと、応用の幅が非常に広いのが特長です。


本記事のおさらい

  • INDIRECT関数は「文字列で参照先を指定できる関数」

  • 範囲やシート名、名前付き範囲などを動的に操作したいときに便利

  • 入力規則の連動や、行数の変動対応など実務で活用できる場面が多い

  • ただし、他のブックを参照できない/構文が固定される/トレースが難しいなど、注意点もある


INDIRECT関数は、うまく使えばExcel作業の柔軟性が格段にアップします。
一方で、見えにくい・壊れやすいといった側面もあるため、活用する場面や目的を明確にしたうえで使うことが大切です。

「こんなことができたらいいのに…」という場面で、INDIRECT関数をぜひ試してみてください!