本記事では、INDIRECT関数で「#REF!」となる場合の解決方法を紹介します。
INDIRECT関数のエラーは、ダブルクォーテーション、シングルクォーテーションで囲む必要があるケースで発生していることがほとんどだと思います。
INDIREC関数の引数をダブルクォーテーションで囲んでいないため、「#REF!」となる場合の解決方法
以下画像では、「参照元」、「参照先」シートがあるExcelブックで、「参照元」シートから「参照先」シートの「B2」セルをINDIRECT関数で参照しようとして「#REF!」エラーとなっています。
<参照元シート>

<参照先シート>

「#REF!」エラーの原因と解決方法
INDIRECT関数で引数に指定する参照先のシート名・セル番地は文字列で直接入力するか、シート名・セル番地を入力したセルを参照させる必要があります。
エラーとなっている式では、「B2」がダブルクォーテーションに囲まれていないため、「#REF!」エラーとなっています。
(B2セルに入力された「シート名」というセルを参照する式になってしまっています)
<エラー>
=INDIRECT(B3&"!"&B2)
以下のように、「B2」をダブルクォーテーションで囲むことで、エラーを解決することができます。
<解決方法>
=INDIRECT(B3&"!"&"B2")
以下のように!とB2をまとめてダブルクォーテーションで囲んで記述することも可能です。
<解決方法>
=INDIRECT(B3&"!B2")
また、以下のように参照するシート名、セル番地を入力したセルを指定する場合は、「"」(ダブルクォーテーション)で囲む必要はありません。
<解決方法>
=INDIRECT(B3&"!"&C3)

解説
INDIRECT関数で他シートのセルを参照する場合は、以下のように引数を文字列で指定します。(引数に参照形式を指定する方法の説明は、本記事では割愛します)
=INDIRECT("シート名!セル番地")
引数のシート名、セル番地を直接文字列で指定する場合は、「""」(ダブルクォーテーション)で囲む必要があります。
シート名、セル番地が入力されたセルを参照する場合は、「""」(ダブルクォーテーション)が不要です。
詳細は以下画像をご参照ください。「参照先」シートの「B2」セルを参照する関数を設定しています。
INDIREC関数の引数をシングルクォーテーションで囲んでいないため、「#REF!」となる場合の解決方法
引数に指定するシート名に、()、<>のようなカッコ、または、-(ハイフン)のような記号を使用している場合は、引数のシート名を「'」(シングルクォーテーション)で囲む必要があります。
<参照元>

<参照先>
「#REF!」エラーの原因と解決方法
エラーとなっている式では、シート名「参照先(1)」が入力されている「B3」をシングルクォーテーションで囲んでいないためエラーとなっています。
<エラー>
=INDIRECT(B3&"!"&C3)
以下のように「"'"」(ダブルクォーテーション、シングルクオーテーション、ダブルクォーテーション)でシート名が入っている「B3」を囲うことで、エラーを解消することができます。
<解決方法>
=INDIRECT("'"&B3&"'"&"!"&C3)
以上、お読みいただきありがとうございました。