INDIRECTは、文字列で書かれたセル番地を、実際の参照として扱う関数です。
"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で作るのが定番です。
- 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(参照文字列) - – 文字列を実際の参照として解釈する
- – シート名の切り替え・連動プルダウンが主な用途
- – シート名は
'で囲むと安全 - – 揮発性で重く、行列の挿入で壊れるので多用しない
関連する関数
- – OFFSET — 基準からずらして参照する
- – IMPORTRANGE — 別ファイルを参照する
- – INDEX — 位置指定で値を取り出す(揮発性でない)
- – 関数一覧に戻る
コメントを残す