INDIRECT関数の使い方・読み方|文字列をセル参照に変える

執筆者:

カテゴリ:

INDIRECT関数の使い方・読み方のイメージ

検索・参照

INDIRECT関数の使い方・読み方

Excel関数辞典

読み方:INDIRECT は「インダイレクト」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)

INDIRECTは、文字列で書かれたセル番地を、実際の参照として扱う関数です。

使える環境Excel○Googleスプレッドシート○
このページの中身(21項目)
  1. 書式
  2. 基本の動き
  3. 実用例1:シート名を切り替える
  4. 実用例2:範囲を動的に指定する
  5. 実用例3:入力規則と連動させる
  6. 使いすぎてはいけない理由
  7. 代わりに使えるもの
  8. エラーの対処
  9. 文字列を参照に変えるという発想
  10. 使うべきでない場面を先に決める
  11. 入力規則と組み合わせる連動プルダウン
  12. 複数シートを横断する集計
  13. 参照を組み立てる前に持ち方を疑う
  14. 「検索・参照」の関数を全体から見る
  15. 数式を書く前の手順
  16. どの関数でも共通する確認
  17. 引き継ぐときに残すこと
  18. このサイトの収録状況
  19. よくある質問
  20. まとめ
  21. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

"A1" という文字列を渡すと、A1セルの中身を返します。一見すると何の役に立つのか分かりにくい関数ですが、参照先そのものを数式で組み立てられるという、他の関数にはできないことができます。

INDIRECT関数の使い方の記事構成図
INDIRECT関数の使い方:この記事で扱う内容

書式

=INDIRECT(参照文字列, [A1表記かどうか])
引数内容
参照文字列"A1" "Sheet2!B3" のような、参照を表す文字列
A1表記かどうか省略時は TRUE(A1形式)。FALSE にするとR1C1形式

第2引数はほぼ使いません。省略で構いません。

基本の動き

A1セルに 100 が入っているとします。

=INDIRECT("A1")   → 100

="A1" なら文字列の「A1」が表示されますが、INDIRECTで包むと参照として解釈されて中身が返ります。

参照文字列を組み立てられるのがポイントです。

=INDIRECT("A" & B1)

B1に 5 が入っていれば A5 を参照します。B1を 6 に変えれば参照先もA6に移ります。数字を入れ替えるだけで参照先が動くわけです。

INDIRECT関数の使い方の要点図
INDIRECT関数の使い方

実用例1:シート名を切り替える

INDIRECTが最も役立つ場面です。「4月」「5月」「6月」という同じ形のシートがあり、1か所のセルで表示を切り替えたい、というケース。

A1セルに月名(例:5月)を入れておき、

=INDIRECT(A1 & "!B10")

とすると、「5月」シートのB10セルが返ります。A1を「6月」に変えれば、参照先も6月シートに切り替わります。

シート名が数式の中に固定されないので、シートを増やしても数式を書き直さずに済みます。

シート名に空白や記号が含まれる場合は、シングルクォートで囲む必要があります。

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

これは実務でよく引っかかるポイントです。シート名に空白が入る可能性があるなら、最初からクォートを付けておくのが安全です。

実用例2:範囲を動的に指定する

集計範囲そのものを可変にできます。

=SUM(INDIRECT("A1:A" & B1))

B1に 10 を入れれば A1:A10 の合計、20 にすれば A1:A20 の合計になります。

ただし、この用途は多くの場合 OFFSET や FILTER のほうが適しています。行数が可変ならそもそも列全体(A:A)を指定してしまうのが一番簡単です。

実用例3:入力規則と連動させる

「大分類を選ぶと、小分類の選択肢が変わる」いわゆる連動プルダウンは、INDIRECTで作るのが定番です。

  1. 小分類のリストごとに名前付き範囲を作る(名前は大分類の値と一致させる)
  2. 小分類のセルの入力規則を =INDIRECT(大分類のセル) にする

大分類で「果物」を選べば、「果物」という名前付き範囲がリストになる、という仕組みです。

使いすぎてはいけない理由

INDIRECTには、はっきりした欠点が3つあります。

1. 参照の追跡が効かない

参照先が文字列なので、スプレッドシートは「この数式がどのセルに依存しているか」を理解できません。参照元のセルを移動しても数式は追従せず、列や行を挿入すると壊れます。通常の参照なら自動で調整される場面で、INDIRECTだけが取り残されます。

2. 動作が重い

INDIRECTは揮発性関数(volatile function)です。シートのどこかが変更されるたびに再計算されます。数が増えるとファイル全体が目に見えて遅くなります。数百個並べるのは避けてください。

3. 閉じた別ファイルは参照できない

IMPORTRANGE の代わりにはなりません。別のスプレッドシートファイルを参照したい場合は IMPORTRANGE を使ってください。

代わりに使えるもの

やりたいことINDIRECTより適した関数
表から値を検索したいXLOOKUP / INDEX+MATCH
基準からずらして参照したいOFFSET(ただしこちらも揮発性)
別ファイルを参照したいIMPORTRANGE
条件に合う行を抜き出したいFILTER / QUERY

「INDIRECTでしか書けないか」を一度考えてから使うのが正解です。多くの場合、他の関数で書けます。

エラーの対処

#REF! が出る

参照文字列が有効な参照になっていません。よくある原因は次の3つです。

  • シート名にスペースや記号が含まれているのにクォートで囲んでいない
  • シート名のスペルが違う/そのシートが存在しない
  • & での連結ミス("!" の付け忘れなど)

原因を切り分けるには、INDIRECTを外して連結結果だけを表示させるのが確実です。

=A1 & "!B10"

これで表示された文字列が、正しい参照の形になっているかを目で確認できます。


文字列を参照に変えるという発想

INDIRECTは、他の関数とは違う次元の働きをします。通常の関数がセルの値を扱うのに対し、この関数はセルの「住所」を文字列として組み立て、それを実際の参照に変換します。参照そのものを計算で作れる、というのが本質です。

この性質があるため、シート名を切り替える、範囲を状況に応じて変える、といった処理ができます。プルダウンでシート名を選ぶと、そのシートのデータが表示される、という仕組みは典型的な使い道です。

一方で、この柔軟さには代償があります。参照が文字列として組み立てられるため、表計算のソフトウェアは事前に依存関係を把握できません。通常の参照であれば、どのセルがどのセルを見ているかが分かるので、変更があった部分だけを再計算できます。INDIRECTを使うと、この最適化が効きません。

さらに深刻なのは、行や列を挿入したときに追従しないことです。通常の参照は、行を挿入すると自動的にずれて、正しい位置を指し続けます。INDIRECTは文字列で指定しているので、指定した文字列のまま動きません。結果として、挿入した瞬間に別のセルを指すようになります。エラーは出ません。静かに間違った値を返します。


使うべきでない場面を先に決める

INDIRECTを使う判断は、他の方法がないかを確かめてからにしてください。多くの場合、代替があります。

範囲を動的にしたいだけなら、INDEXで書けます。開始位置と終了位置を指定してコロンでつなぐ形です。揮発性でもなく、依存関係も追跡されます。

条件によって参照先を変えたいだけなら、IFやIFSで分岐すれば済みます。参照先が数種類に限られるなら、こちらのほうが読みやすく、行の挿入にも耐えます。

別の表から値を引きたいだけなら、検索関数で足ります。INDIRECTでシート名を組み立てなくても、あらかじめすべてのシートを縦につないだ一枚の表を用意しておけば、単純な検索で済みます。データの持ち方を変えるだけで、複雑な数式が不要になることは多くあります。

INDIRECTが本当に必要なのは、参照先が実行時にしか決まらない場合です。利用者がプルダウンで選んだ対象に応じて、参照するシートが変わる。このような、選択肢が多く事前に列挙できない場合に限られます。


入力規則と組み合わせる連動プルダウン

INDIRECTの代表的な用途が、二段階のプルダウンです。大分類を選ぶと、小分類の選択肢がそれに応じて変わる、という仕組みです。

考え方はこうです。小分類の一覧を、大分類の名前を付けた範囲として定義しておきます。次に、小分類のプルダウンの参照先を、大分類のセルを参照するINDIRECTで指定します。大分類が変われば、参照する名前が変わり、選択肢が切り替わります。

実装で注意すべき点がいくつかあります。まず、名前として使える文字に制限があります。空白や記号は使えず、数字から始めることもできません。大分類の名前に空白が含まれるなら、名前を付けるときに置き換える必要があります。

次に、大分類を変更しても、小分類のセルに残っている古い値は消えません。整合しない組み合わせが残ることになります。定期的に確認するか、条件付き書式で不整合を目立たせる工夫が要ります。

三つ目に、選択肢の一覧を別のシートに置く場合、そのシートを非表示にすると編集しづらくなります。運用の手順を決めておいてください。

具体的な作り方は、連動プルダウンの記事にまとめています。→ プルダウンの作り方


複数シートを横断する集計

各月のシートが分かれている構成で、月ごとの合計を一覧にしたい、という場面があります。INDIRECTでシート名を組み立てれば、一本の数式を下にコピーするだけで全月分が集計できます。

シート名を並べた列を用意し、その値と参照したいセル番地を連結して、INDIRECTに渡す形です。シート名を書き換えれば参照先が変わるので、シートが増えたときも行を足すだけで済みます。

ただし、この構成そのものを見直す価値もあります。月ごとにシートを分けると、集計のたびに横断する必要が出てきます。すべてのデータを一枚のシートに縦に積み、月の列を持たせる形にすれば、単純な条件付き集計で済みます。データの持ち方を変えるほうが、長期的には楽になることが多いのです。

シートを分ける構成が避けられない場合でも、集計用の中間シートを用意し、そこにINDIRECTを集約するのが安全です。数式の数を抑えられ、どこで参照を組み立てているかも明確になります。


参照を組み立てる前に持ち方を疑う

参照を文字列から組み立てたくなったとき、その必要が本当にあるのかを一度考えてください。多くの場合、データの持ち方を変えれば不要になります。

月ごとにシートが分かれていて、月を選ぶと該当シートを参照したい。これは典型的な使いどころですが、そもそも月ごとにシートを分けなければ、この処理は要りません。一枚に縦積みして月を列で持てば、条件付きの集計だけで済みます。

支店ごとにファイルが分かれていて、支店を選んで参照したい。これも同じです。統合できるなら統合したほうが、以降の作業がすべて楽になります。

参照先が数種類に限られるなら、条件分岐で書けます。三つや四つなら、分岐のほうが読みやすく、行の挿入にも耐えます。

選択肢の一覧から選ぶだけなら、検索の関数で足りることもあります。対応表を用意すれば、参照を組み立てる必要はありません。

本当に必要なのは、参照先が実行時にしか決まらず、選択肢を事前に列挙できない場合だけです。この条件に当てはまるかを確認してから使ってください。

行の挿入に追従しないという弱点は、運用が続くほど効いてきます。使わずに済むなら、それが最善です。

「検索・参照」の関数を全体から見る

検索・参照は別の表から値を持ってくる関数群です。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに16本あります。

記事
ADDRESS
CHOOSE
COLUMN
COLUMNS
HLOOKUP
IMPORTDATA
IMPORTHTML
IMPORTRANGE
INDEX
MATCH
OFFSET
ROW
ROWS
VLOOKUP
XLOOKUP
XMATCH

このカテゴリで共通するつまずき

検索値の型と前後の空白で結果が変わります。掃除を先に済ませてください。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。

どれを使うかの決め方

検索列が左端にあるか、返したい列が複数あるかで使う関数が決まります。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。

迷ったときは

→ 全関数の一覧 に目的別の索引があります。


数式を書く前の手順

書き始める前に決めておくことがあります。ここが曖昧なまま書くと、途中で行き詰まります。

1. 出したい結果を一文で書く

「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。

2. 元データの型を確認する

検索値の型と前後の空白で結果が変わります。掃除を先に済ませてください。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。

3. 空欄と0の扱いを決める

未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。

4. 条件の数を数える

検索列が左端にあるか、返したい列が複数あるかで使う関数が決まります。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。

5. 共有先の環境を確認する

新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。

6. 1行だけ書いて確認する

全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。


どの関数でも共通する確認

関数を問わず、結果がずれる原因は限られています。この5つを確認すれば、大半が解決します。

参照を固定したか

下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。

範囲の行数が揃っているか

複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。

型が揃っているか

=ISNUMBER(A2)

数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。

前後に空白が入っていないか

=LEN(A2)&" / "&LEN(TRIM(A2))

数が違えば、余分な空白が入っています。見た目では判別できません。

別の方法で検算したか

同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。

最終行まで確認したか

一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。


引き継ぐときに残すこと

数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。

何を出している数式か

一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。

どの表を参照しているか

参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。

該当しないときの扱い

空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。

触ってはいけない場所

列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。

使った関数の対応環境

新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。

確定した期間は値にする

締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。

このサイトの収録状況

現在、201本の記事をカテゴリ別に整理しています。関数名が分からない場合は、カテゴリから探してください。

カテゴリ記事数
目的別51本
集計47本
文字列31本
日付19本
検索・参照15本 ←この記事
条件15本
機能12本
配列・抽出10本
関数一覧1本

探し方の順番

関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。

記事の構成

どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。


よくある質問

Q. 参照が無効というエラーが出ます

組み立てた文字列が、正しいセル番地になっていません。INDIRECTを外して、文字列として何が組み立てられているかを表示してみてください。

Q. シート名に空白があると動きません

シート名をシングルクォートで囲む必要があります。連結するときにクォートも含めてください。

Q. 行を挿入したら値がずれました

INDIRECTは追従しません。文字列で指定しているためです。挿入の可能性がある表では使わないでください。

Q. 別のファイルを参照できますか

閉じているファイルは参照できません。開いている必要があります。

Q. 重くなる原因になりますか

依存関係が追跡できないため、再計算の効率が落ちます。数が多いと影響が出ます。

Q. 名前の定義と組み合わせられますか

できます。定義した名前を文字列として渡せば、その範囲が返ります。連動プルダウンで使う定番の方法です。

Q. 他の関数で代替できませんか

多くの場合できます。範囲の動的化はINDEX、分岐はIFやIFS、別表の参照は検索関数で書けます。

Q. スプレッドシートとExcelで違いはありますか

参照の記法に違いがあり、片方で作った数式がそのままでは動かないことがあります。ファイルを移す予定があるなら注意してください。



まとめ

  • 書式は =INDIRECT(参照文字列)
  • 文字列を実際の参照として解釈する
  • シート名の切り替え・連動プルダウンが主な用途
  • シート名は ' で囲むと安全
  • 揮発性で重く、行列の挿入で壊れるので多用しない

関連する関数