INDIRECT関数の使い方|セル参照を文字列で動的に指定
INDIRECT関数は、文字列として指定したセル参照を実際のセル参照に変換する関数です。シート名やセルアドレスを動的に切り替えたい場面で威力を発揮します。入力規則(ドロップダウンリスト)との連携や、複数シートの集計を自動化するときに欠かせない関数です。この記事では、基本的な構文から実務で役立つ応用テクニックまでを丁寧に解説します。
INDIRECT関数の基本構文
=INDIRECT(参照文字列, [参照形式])
引数の説明
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 参照文字列 | セル参照を表す文字列。セル参照や文字列の結合で指定可能 | 必須 |
| 参照形式 | TRUEまたは省略でA1形式、FALSEでR1C1形式 | 任意 |
基本的な動作
たとえば、セルA1に「B5」という文字列が入力されているとき、以下の数式はセルB5の値を返します。
=INDIRECT(A1)
通常のセル参照(=B5)との違いは、参照先を文字列で動的に変更できる点にあります。A1の値を「C10」に変えれば、自動的にセルC10の値を返すようになります。
直接文字列を指定する場合
=INDIRECT("B5")
この場合は常にセルB5を参照するため、動的な参照としてのメリットはありません。INDIRECTの真価は、文字列の結合と組み合わせたときに発揮されます。
文字列結合でセル参照を動的に作成する
INDIRECT関数と文字列結合(&演算子)を組み合わせると、参照先を柔軟に制御できます。
列番号を動的に変更する
セルE1に列のアルファベット(例:「C」)が入力されている場合、以下の数式でその列の3行目を参照できます。
=INDIRECT(E1 & "3")
E1が「C」なら「C3」、「D」なら「D3」のセルを参照します。
行番号を動的に変更する
社員名簿から特定の行番号のデータを取得する例です。セルF1に行番号(例:5)が入力されているとします。
=INDIRECT("B" & F1)
F1が5なら「B5」を参照し、その行の社員名を返します。データの件数に応じて参照行を切り替えたい場合に便利です。
範囲を動的に指定する
SUM関数と組み合わせて、集計範囲を動的に変更する例です。
=SUM(INDIRECT("B2:B" & F1))
F1に「10」と入力されていれば、B2:B10の合計を返します。データの行数が変動する表で、最終行を別セルで管理しておけば集計範囲を自動調整できます。
シート名を動的に参照する
INDIRECT関数の実務での活用として最も多いのが、シート名の動的参照です。
基本的なシート参照の書き方
別シートのセルを参照するには、シート名とセルアドレスを結合します。
=INDIRECT("'" & A1 & "'!B2")
A1に「東京支店」と入力されていれば、「東京支店」シートのセルB2を参照します。シート名をシングルクォーテーションで囲んでいるのは、シート名にスペースや特殊文字が含まれる場合への対応です。
月別シートから売上を集計する
各月の売上データが「1月」「2月」のように月別シートに分かれている場合を考えます。A列に月名が入力されているとします。
| A列 | B列(集計結果) |
|---|---|
| 1月 | =INDIRECT(”’” & A2 & ”’!D10”) |
| 2月 | =INDIRECT(”’” & A3 & ”’!D10”) |
| 3月 | =INDIRECT(”’” & A4 & ”’!D10”) |
各シートのD10セルに月間売上合計が入っていれば、この数式で各月の売上を一覧表にまとめられます。シートが追加されても、A列に月名を追記するだけで対応できます。
支店別シートの集計
全国の支店別にシートが分かれている場合、支店名のリストをもとに各支店の売上を集計する例です。
=SUM(INDIRECT("'" & A2 & "'!C2:C100"))
A2に「大阪支店」と入力されていれば、「大阪支店」シートのC2:C100の合計を返します。
入力規則(ドロップダウン)との連携
INDIRECT関数と入力規則を組み合わせると、連動するドロップダウンリストを作成できます。
連動ドロップダウンリストの仕組み
たとえば、商品カテゴリを選ぶと、そのカテゴリに属する商品がドロップダウンに表示される仕組みです。
まず、名前の定義を使って各カテゴリの商品リストを登録します。
| 名前 | 参照範囲 |
|---|---|
| 家電 | Sheet2!A2:A5 |
| 文具 | Sheet2!B2:B5 |
| 食品 | Sheet2!C2:C5 |
設定手順
- セルA1に1つ目のドロップダウン(カテゴリ選択)を設定します
- セルB1の入力規則で「元の値」に以下を指定します
=INDIRECT(A1)
A1で「家電」を選ぶと、B1のドロップダウンには「家電」という名前で定義された商品リストが表示されます。A1を「文具」に変えれば、B1の選択肢も文具の商品リストに自動で切り替わります。
注意点
- 名前の定義にスペースやハイフンを含めることはできません
- カテゴリ名と名前の定義が完全に一致している必要があります
- カテゴリ名に全角スペースが含まれる場合は、SUBSTITUTE関数で除去するなどの工夫が必要です
名前付き範囲との組み合わせ
名前の定義とINDIRECT関数を組み合わせると、わかりやすい数式を作成できます。
名前付き範囲を動的に切り替える
「売上_東京」「売上_大阪」「売上_名古屋」のように名前を定義しておき、セルの値で切り替える例です。
=SUM(INDIRECT("売上_" & A1))
A1に「東京」と入力すれば「売上_東京」の合計を返し、「大阪」に変えれば「売上_大阪」の合計を返します。
テーブル名を動的に指定する
Excelのテーブル機能を使っている場合、テーブル名をINDIRECTで動的に指定できます。
=SUM(INDIRECT(A1 & "[売上金額]"))
A1に「商品テーブル」と入力されていれば、「商品テーブル」テーブルの「売上金額」列の合計を返します。
INDIRECT関数の注意点と制限事項
揮発性関数である
INDIRECT関数は揮発性関数(volatile function)に分類されます。Excelがセルを再計算するたびに、INDIRECTを含む数式もすべて再計算されます。大量のINDIRECT関数を使用すると、ブックの動作が遅くなる可能性があります。
参照先が存在しない場合のエラー
参照文字列が無効なセルアドレスを指している場合、#REF!エラーが返されます。シート名が変更された場合や、参照先のシートが削除された場合も同様です。IFERROR関数で対処しておくことをおすすめします。
=IFERROR(INDIRECT("'" & A1 & "'!B2"), "参照エラー")
閉じたブックは参照できない
INDIRECT関数は、閉じているブック(ファイル)のセルを参照できません。参照先のブックを開いた状態でなければ正しい値を取得できない点に注意が必要です。
まとめ
INDIRECT関数は、セル参照を文字列で動的に指定できる便利な関数です。以下のポイントを押さえておきましょう。
- 文字列結合(&演算子)と組み合わせて参照先を動的に切り替えられる
- シート名を動的に指定することで、複数シートの集計を効率化できる
- 入力規則と組み合わせて連動ドロップダウンリストを作成できる
- 揮発性関数のため、大量使用時はパフォーマンスに注意する
- 参照先が存在しない場合に備えてIFERROR関数で対処する
INDIRECT関数は一見地味ですが、使いこなすとExcelの操作性が大幅に向上します。特にシート名の動的参照や連動ドロップダウンは実務で頻出するテクニックですので、ぜひ活用してみてください。