INDIRECT関数で別シート参照時の#REF!エラーへの対処法

ここでは、「INDIRECT関数の別シート参照で#REF!エラーになる時の対処法」を解説します。

 

これで、IINDIRECT関数でシート名が参照できないエラーを解消することができます。

1.まずは#REF!エラーの状況を確認

始めに、INDIRECT関数の別シート参照で#REF!エラーになる状況を、例を含めて確認します。

 

1-1.シート名を適切に指定できていない

INDIRECT関数の別シート参照で#REF!エラーになるのは、「シート名を適切に指定できていない」からです。

 

普通に考えると、シート名が「Sheet1」なら「Sheet1」と入力されたセルを指定すればいいだけと思いますが、これだと#REF!エラーになってしまうことがあります。

 

1-2.エラーになった例を確認

次に、エラーになってしまった例を確認します。

 

例で使うのは、「シートごとに分けた四半期ごとの売上表(シートは全部で4つ)」と「年間シートの売上表(シート1つ)」です。

 

四半期ごとの売上金額を年間の売上表へ、INDIRECT関数をかませて手間なくリンクさせたいとします。

上は、「四半期ごとの売上表」の1~3月分のシートです。

 

その他の四半期ごとのシートも対象月が違うだけで、表の作りやセルの位置は同じとします。

 

そして、上が「年間売上表」です。

 

ちなみに「年間売上表」のセルB3からE3までの値は、「四半期売上表」のシート名と一致させています。

 

これは、年間売上表のセルの位置によってINDIRECT関数で参照するシートを変えるためです。

 

 年間売上表のセルB4への数式は、

=INDIRECT(B3&"!B4")

と入れました。

 

数式の意味は「『1~3月(セルB3の値)』シートのセルB4を参照しなさい」で、参照先のセル(B3)の値に置き換えると数式は、

=1~3月!B4

となり、問題なさそうです。

 

しかし…

結果は、#REF!エラーとなってしまいました。

 

原因はどこにあるのでしょうか?

2.別シート参照で#REF!エラーになる原因は?

INDIRECT関数の別シート参照で#REF!エラーになる直接の原因は、「シート名にある記号『~』」です。

 

シート名に「~」や「-」、「(」や「)」といった記号が使われていると、先ほどの数式ではダメのです。

 

では、もっとシンプルな例を見てみましょう。

例えば、上のようにSheet1のセルA1に「テスト」という値が入っていたとします。

 

そして、Sheet2に「Sheet1のセルA1」の値を数式で表示させたい場合、「Sheet2のセルA1を選択」⇒「『=』入力後、シートSheet1をクリック」⇒「セルA1をクリック」という操作をすると、式は

=Sheet1!A1

となります。

 

この場合は、例えばセルA5に入れた「Sheet1」という値を使って

=INDIRECT(A5&"!A1")

という数式を書いてもエラーにはなりません。

 

ちなみに、置き換えると数式は、

=Sheet1!A1

となり、先ほどの数式と一致します。

 

次に、「~」というシートのセルA1に「テスト2」という値が入っていたとします。

 

そして、Sheet3に「~シートのセルA1」の値を参照する数式を、INDIRECT関数を使わないで作ると、

='~'!A1

となり、「『'』がシート名『~』の前後につく」のが分かります。

 

この場合は、セルA5に入れた「~」という値を使って

=INDIRECT(A5&"!A1")

という数式を書いても「#REF!エラー」になります。

 

置き換えると数式は、

=~!A1

となり、「'」が不足しているのが分かります。

 

つまり、INDIRECT関数でシート名を指定する時、「シート名に『~』や『-』、『(』や『)』の記号が使われている場合には『'』が必要」なのです。

3.エラーの回避方法と数式の作り方

最後に、#REF!エラーの回避方法と、エラーにならない分かりやすい数式の作り方についてです。

 

3-1.#REF!エラーの回避方法

まず、#REF!エラーの回避方法は、「シート名の前後に『’』をつける」ことです。

 

ただし、「『'』は『"』で囲む必要もあります」

 

例えば先ほどの年間売上表の場合、正しい数式は、

=INDIRECT("'"&B3&"'!B4")

です。

 

クォーテーションがたくさんあって分かりづらいですが、INDIRECT(の後は「"」→「'」→「"」。&B3&の後は「"」→「'」→「!B4」→「"」です。

まず前提として、この数式は「各シートのセルB4を参照」させるためのもので、シート名だけを可変にしています。

 

そのためINDIRECT関数の数式は、「『可変のシート名』と『固定のセルB4』を「&」でつなげた形」になります。

 

そしてそもそもINDIRECT関数では、可変の部分はそのまま、固定の部分(例だと「'」や「'!B4」)は「"」で囲む必要があります。

 

この点を踏まえて一つ一つ解説すると、「=INDIRECT(」の次は「”」→「'」→「”」です。つまり、「'」を固定しています。

 

そして、シート名が入る部分はセルB3を参照する可変なので、「&B3&」となります。

 

その後「”」→「'!B4」→「”」で「'!B4」を固定します。

 

以上のことから数式は、

=INDIRECT("'"&B3&"'!B4")

となるのです。

 

3-2.エラーにならない分かりやすい数式の作り方

ただ、実際に数式を作るとなると、こんがらがってしまうものです。

 

そこで、INDIRECT関数でシート名を可変にする場合のおすすめは、「INDIRECT関数を使わない数式の形を見ながら作る」です。

例えば先ほどの数式は、INDIRECT関数を使わない場合、上のように

='1~3月'!B4

となります。

 

なので、INDIRECT関数の場合でも使わない数式を可変と固定に分けて、「シート名の前後に『'』が文字列として入るように固定部分を『"』でくくる」とよいのです。

 

このように、INDIRECT関数で#REF!エラーが出た場合には「INDIRECT関数を使わない数式」を作ってみて、その形を見ながら作り直すとよいでしょう。

 

以上、参考になれば幸いです。

 


口コミ・評判のいいExcel本の紹介】


Top