オーロラさんの勉強帳

IT企業勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。少しでもお役に立てたら幸いです。

【Excel】INDIRECT関数で「#REF!」エラーとなる場合の解決方法

本記事では、INDIRECT関数「#REF!」となる場合の解決方法を紹介します。
INDIRECT関数のエラーは、ダブルクォーテーションシングルクォーテーションで囲む必要があるケースで発生していることがほとんどだと思います。

INDIREC関数の引数をダブルクォーテーションで囲んでいないため、「#REF!」となる場合の解決方法

以下画像では、「参照元」、「参照先」シートがあるExcelブックで、「参照元」シートから「参照先」シートの「B2」セルをINDIRECT関数で参照しようとして「#REF!」エラーとなっています。


<参照元シート>

INDIRECT関数で「#REF!」となる場合

<参照先シート>

参照先シート

「#REF!」エラーの原因と解決方法

INDIRECT関数で引数に指定する参照先のシート名・セル番地は文字列で直接入力するか、シート名・セル番地を入力したセルを参照させる必要があります。
エラーとなっている式では、「B2」がダブルクォーテーションに囲まれていないため、「#REF!」エラーとなっています。
(B2セルに入力された「シート名」というセルを参照する式になってしまっています)

<エラー>
=INDIRECT(B3&"!"&B2)

以下のように、「B2」をダブルクォーテーションで囲むことで、エラーを解決することができます。

<解決方法>
=INDIRECT(B3&"!"&"B2")

以下のように!とB2をまとめてダブルクォーテーションで囲んで記述することも可能です。

<解決方法>
=INDIRECT(B3&"!B2")

また、以下のように参照するシート名、セル番地を入力したセルを指定する場合は、「"」(ダブルクォーテーション)で囲む必要はありません。

<解決方法>
=INDIRECT(B3&"!"&C3)

INDIRECT関数 シート名、セル番地を入力したセルを活用する

解説

INDIRECT関数で他シートのセルを参照する場合は、以下のように引数を文字列で指定します。(引数に参照形式を指定する方法の説明は、本記事では割愛します)
=INDIRECT("シート名!セル番地")

引数のシート名、セル番地を直接文字列で指定する場合は、「""」(ダブルクォーテーション)で囲む必要があります。
シート名、セル番地が入力されたセルを参照する場合は、「""」(ダブルクォーテーション)が不要です。

詳細は以下画像をご参照ください。「参照先」シートの「B2」セルを参照する関数を設定しています。



INDIREC関数の引数をシングルクォーテーションで囲んでいないため、「#REF!」となる場合の解決方法

引数に指定するシート名に、()、<>のようなカッコまたは、-(ハイフン)のような記号を使用している場合は、引数のシート名を「'」(シングルクォーテーション)で囲む必要があります。



<参照元>

INDIRECT関数 「#REF!」エラー


<参照先>

「#REF!」エラーの原因と解決方法

エラーとなっている式では、シート名「参照先(1)」が入力されている「B3」をシングルクォーテーションで囲んでいないためエラーとなっています。

<エラー>
=INDIRECT(B3&"!"&C3)

以下のように「"'"」(ダブルクォーテーション、シングルクオーテーション、ダブルクォーテーション)でシート名が入っている「B3」を囲うことで、エラーを解消することができます。

<解決方法>
=INDIRECT("'"&B3&"'"&"!"&C3)


以上、お読みいただきありがとうございました。