検索・参照
INDIRECT関数の使い方・読み方
読み方:INDIRECT は「インダイレクト」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)
INDIRECTは、文字列で書かれたセル番地を、実際の参照として扱う関数です。
このページの中身(21項目)
この記事の書式と対応環境の出どころ(2026-08-26 確認)
- Google スプレッドシート ヘルプ:公式の書式は
INDIRECT(セル参照の文字列)
https://support.google.com/docs/answer/3093377 - Microsoft サポート:INDIRECT 関数
https://support.microsoft.com/ja-jp/excel/functions/indirect-function
関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。
"A1" という文字列を渡すと、A1セルの中身を返します。一見すると何の役に立つのか分かりにくい関数ですが、参照先そのものを数式で組み立てられるという、他の関数にはできないことができます。

書式
=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に移ります。数字を入れ替えるだけで参照先が動くわけです。

実用例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で作るのが定番です。
- 小分類のリストごとに名前付き範囲を作る(名前は大分類の値と一致させる)
- 小分類のセルの入力規則を
=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(参照文字列) - 文字列を実際の参照として解釈する
- シート名の切り替え・連動プルダウンが主な用途
- シート名は
'で囲むと安全 - 揮発性で重く、行列の挿入で壊れるので多用しない
関連する関数
- OFFSET — 基準からずらして参照する
- IMPORTRANGE — 別ファイルを参照する
- INDEX — 位置指定で値を取り出す(揮発性でない)
- 関数一覧に戻る