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

執筆者:

カテゴリ:

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 の合計になります。

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

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

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

  1. 1. 小分類のリストごとに名前付き範囲を作る(名前は大分類の値と一致させる)
  2. 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(参照文字列)
  • – 文字列を実際の参照として解釈する
  • – シート名の切り替え・連動プルダウンが主な用途
  • – シート名は ' で囲むと安全
  • 揮発性で重く、行列の挿入で壊れるので多用しない

関連する関数

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です