ExcelのINDIRECT関数の使い方|別シート参照・連動ドロップダウンまで

スポンサーリンク

Excelの「INDIRECT関数」って名前は聞いたことあるけど、いまいち使いどころがわからない…。そんな方も多いのではないでしょうか。

実際、INDIRECT関数を知らないままだと困る場面があります。シートが増えるたびに数式をコピペで書き換えたり、ドロップダウンの選択肢を手動で差し替えたり、地味に面倒な作業が増えてしまうんです。

この記事では、INDIRECT関数の基本から別シート参照・連動ドロップダウンまで、実務で使えるパターンをまとめて解説します。一度覚えれば、数式の「動的な参照切り替え」がぐっとラクになりますよ。

INDIRECT関数とは?

ExcelのINDIRECT関数は、文字列をセル参照に変換する関数です。ふつうの数式では =A1 のように参照先を直接書きますよね。INDIRECT関数を使うと、「A1」という文字列を渡すだけで、セルA1の値を取得できます。

つまり、参照先を”文字列で”コントロールできるのがポイントです。セルの値やドロップダウンの選択内容に応じて、参照先をリアルタイムに切り替えられます。

読み方・語源

読み方は「インダイレクト」です。英語の「indirect」は「間接的な」という意味。セルを直接参照するのではなく、文字列を経由して間接的に参照することからこの名前がついています。

INDIRECT関数でできること

INDIRECT関数を使うと、次のようなことが実現できます。

  • セル番地を文字列で指定して、動的に参照先を切り替える
  • 別シートのデータをシート名の文字列で参照する
  • ドロップダウンの選択に連動して表示内容を変える
  • VLOOKUP関数の検索範囲をシートごとに切り替える

どれも「参照先を動的に変えたい」場面で活躍する使い方です。順番に見ていきましょう。

INDIRECT関数の書き方

基本構文

=INDIRECT(参照文字列, [参照形式])

引数の説明

引数必須/省略可説明
参照文字列必須セル参照を表すテキスト文字列。セル番地・範囲名・定義された名前を指定できる
参照形式省略可TRUE(省略時のデフォルト)= A1形式で解釈。FALSE = R1C1形式で解釈

第2引数の「参照形式」は、ほとんどの場面でTRUE(A1形式)を使います。R1C1形式を扱うケースはまれなので、基本的には省略してOKですよ。

INDIRECT関数の基本的な使い方

文字列でセルを参照する(最小サンプル)

まずは一番シンプルな例を見てみましょう。セルA1に「B2」という文字列が入っている状態で、次の数式を入力します。

=INDIRECT(A1)

A1には「B2」というテキストが入っています。INDIRECT関数はこれをセル参照として解釈し、セルB2の値を返します。

A1の値を「C5」に書き換えれば、同じ数式のまま参照先がC5に切り替わります。数式を編集せずに参照先を変更できるのが、INDIRECT関数の強みです。

文字列を直接指定することもできます。

=INDIRECT("B2")

この場合は常にB2を参照します。ただし動的に切り替える必要がないなら、ふつうに =B2 と書くほうがシンプルですよ。

別シートのセルを参照する

INDIRECT関数が本領を発揮するのは、別シートの参照です。セルA1にシート名が入っている場合、次のように書きます。

=INDIRECT(A1&"!B2")

A1に「売上データ」と入力されていれば、「売上データ!B2」という文字列に変換されます。そのまま売上データシートのB2セルを参照できます。

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

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

こうすれば、「’2025年 売上’!B2」のようにシート名がクォートで囲まれ、正しく参照できます。実務ではスペース入りのシート名も多いので、迷ったらクォート付きの書き方を使うのが安全ですよ。

実務で使えるINDIRECT関数の活用パターン

パターン1: 連動ドロップダウンを作る(名前の定義を使う手順)

INDIRECT関数の代表的な使い方が連動ドロップダウンです。1つ目のドロップダウンで選んだ値に応じて、2つ目の選択肢が自動で切り替わります。

たとえば、1つ目で「果物」を選ぶと、2つ目に「りんご・みかん・ぶどう」が表示されます。「野菜」に変えると「にんじん・キャベツ・トマト」に切り替わる、というイメージです。

手順は次のとおりです。

ステップ1: 選択肢のデータを用意する

別シートなどに、カテゴリごとの選択肢を縦に並べます。

ステップ2: 名前の定義を登録する

選択肢の範囲を選択し、「数式」タブ →「名前の定義」で名前を付けます。ポイントは、名前をカテゴリ名と一致させることです。

  • 「りんご・みかん・ぶどう」の範囲 → 名前:果物
  • 「にんじん・キャベツ・トマト」の範囲 → 名前:野菜

ステップ3: 第1ドロップダウンを設定する

C2セルなどに「データの入力規則」で、ソースを「果物,野菜」とカンマ区切りで指定します。

ステップ4: 第2ドロップダウンにINDIRECTを設定する

D2セルの「データの入力規則」で、ソースに次の数式を入力します。

=INDIRECT(C2)

C2で「果物」を選ぶと、INDIRECT関数が「果物」という文字列を名前の定義として解釈します。結果として、名前「果物」に登録された範囲(りんご・みかん・ぶどう)がドロップダウンの選択肢になります。

これで連動ドロップダウンの完成です。カテゴリを増やしたいときは、名前の定義を追加するだけで対応できますよ。

パターン2: 別シートをドロップダウンで動的に切り替える

「東京」「大阪」「名古屋」など、支店ごとにシートが分かれている場合を考えます。集計シートにドロップダウンを置いて、選択した支店のデータを自動で表示させる方法です。

A1セルにドロップダウンで支店名を選べるようにしたら、データを取得したいセルに次のように入力します。

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

A1で「東京」を選べば東京シートのB2、「大阪」を選べば大阪シートのB2の値が表示されます。

SUM関数と組み合わせれば、範囲集計も動的に切り替えられます。

=SUM(INDIRECT("'"&A1&"'!B2:B10"))

シートをまたいだデータの切り替えがドロップダウン一つで完結するので、レポート作成がラクになりますよ。

パターン3: VLOOKUPの検索範囲を条件で切り替える

VLOOKUP関数の検索範囲をINDIRECTで動的に指定するテクニックです。部署ごとにシートが分かれている場面で便利に使えます。

=VLOOKUP(A2, INDIRECT("'"&B1&"'!A:C"), 2, 0)

B1セルにシート名(部署名)を入れておけば、同じ数式のまま検索対象のシートを切り替えられます。

INDEX関数MATCH関数を組み合わせるパターンでも、同じ考え方が使えます。検索系の関数とINDIRECTの相性は抜群ですよ。

パターン4: ADDRESS関数と組み合わせて行・列を動的に指定する

ADDRESS関数は、行番号と列番号からセル番地の文字列を生成します。これをINDIRECT関数に渡すと、行・列の両方を動的にコントロールできます。

=INDIRECT(ADDRESS(B1, C1))

B1に行番号(例: 3)、C1に列番号(例: 2)を入れると、ADDRESS関数が「$B$3」という文字列を生成します。INDIRECT関数がこれをセル参照に変換し、B3の値を返します。

ROW関数COLUMN関数と組み合わせれば、さらに柔軟な参照が可能です。ただし、ここまで複雑になるならINDEX関数のほうがシンプルに書ける場合もあります。用途に応じて使い分けてみてください。

よくあるエラーと対処法

INDIRECT関数で遭遇しやすいエラーとその原因を整理します。

エラー原因対処法
#REF!参照文字列がセル番地として無効文字列の中身を確認。タイポや余分なスペースがないかチェック
#REF!参照先の外部ブックが閉じている参照元のブックを開いた状態で使用する
#REF!シート名が存在しないシート名のスペルを確認。シングルクォートの有無も要チェック
#REF!行・列の上限を超えている行1,048,576・列16,384(XFD列)以内か確認

INDIRECT関数のエラーはほとんどが#REF!です。参照文字列が正しいセル番地・シート名・名前の定義になっているかを確認するのが、最も確実な対処法です。

参照文字列が有効かどうかを事前にチェックしたい場合は、ISREF関数が使えます。

=ISREF(INDIRECT(A1))

参照が有効ならTRUE、無効ならFALSEを返します。IFERROR関数と組み合わせてエラー表示を回避するのもおすすめですよ。

INDIRECT関数の注意点(使う場面・使わない場面)

INDIRECT関数は便利ですが、特性を理解した上で使うことが大切です。

揮発性関数であることの影響

INDIRECT関数は揮発性関数(Volatile Function)です。これは、シート内のどのセルが変更されても、INDIRECT関数を含むすべてのセルが再計算されるという意味です。

TODAY関数・NOW関数・RAND関数・OFFSET関数も同じ揮発性関数に分類されます。

数個のINDIRECT関数なら体感への影響はありません。しかし、数百〜数千セルで使うと、再計算の負荷が積み重なります。ファイルを開くたび・セルを編集するたびに処理が走り、動作が重くなる原因になります。大量に使う場面では注意が必要です。

閉じたブックを参照できない制約

INDIRECT関数で外部ブックを参照する場合、参照先のブックを開いておく必要があります。ブックを閉じると#REF!エラーになります。

ふつうのセル参照(=[Book1.xlsx]Sheet1!A1)なら、ブックを閉じていてもキャッシュされた値が表示されます。しかし、INDIRECT関数は毎回文字列を動的に評価するため、キャッシュが効きません。

なお、Excel Online(ブラウザ版)でも外部ブック参照は非対応です。

INDEXやOFFSETのほうが適切なケース

「参照先を動的に変えたい」という目的がINDIRECTと同じでも、別の関数のほうが適切な場合があります。

  • 行・列番号で参照先を指定できる場合INDEX関数がおすすめ。揮発性ではないため、パフォーマンスに影響しません
  • 起点セルからの相対位置で範囲を定義したい場合OFFSET関数も選択肢に入ります。ただしOFFSETも揮発性関数です

INDIRECT関数が本領を発揮するのは、文字列ベースの参照が必要な場面です。「シート名を動的に切り替えたい」「名前の定義を文字列で呼び出したい」といったケースがこれにあたります。数値ベースで参照先が決まるなら、INDEX関数のほうが軽量でシンプルに書けますよ。

似た関数との違い・使い分け

INDIRECT関数と混同しやすい関数を比較します。

関数特徴揮発性使うべき場面
INDIRECT文字列をセル参照に変換ありシート名・名前の定義を動的に切り替えたいとき
INDEX行番号・列番号で範囲内の値を取得なし行列番号で参照先が決まるとき(INDIRECTより軽量)
OFFSET起点セルから相対位置で参照あり起点+オフセットで可変範囲を定義したいとき
ADDRESS行番号・列番号からセル番地の文字列を生成なしINDIRECTに渡す文字列を動的に組み立てたいとき

迷ったときの判断基準はシンプルです。「シート名を文字列で動的に組み立てたい」ならINDIRECTを選んでください。「行番号・列番号で参照先が決まる」場面ならINDEXのほうが向いています。

VLOOKUPとINDEX+MATCHの使い分けについては、別の記事で詳しくまとめています。VLOOKUP・XLOOKUP・INDEX MATCH使い分けガイドもぜひ参考にしてみてください。

まとめ

INDIRECT関数は、文字列をセル参照に変換する関数です。この記事で紹介した使い方をおさらいします。

  • 基本: 文字列でセル番地を指定して値を取得する
  • 別シート参照: シート名を動的に切り替える
  • 連動ドロップダウン: 名前の定義とINDIRECTで選択肢を連動させる
  • VLOOKUPとの組み合わせ: 検索範囲をシートごとに切り替える

揮発性関数なので大量使用には注意が必要ですが、「シート名や参照先を動的に変えたい」場面では代替が効かない便利な関数です。

まずは連動ドロップダウンや別シート参照から試してみてください。

タイトルとURLをコピーしました