「INDIRECT関数を使ったら、シート名を間違えて #REF! エラーが出てしまった……」。動的にセル参照を組み立てる数式では、参照先が存在しないトラブルが起きがちですよね。
参照が正しいかどうかを1つずつ目視で確認するのは大変です。そんなときに活躍するのがISREF関数です。
この記事では、ISREF関数の基本から実務活用パターンまでまとめて紹介します。
この記事は次のような人におすすめ
– セル参照が有効かどうかを確認したい
– INDIRECT関数で組み立てた参照が正しいかチェックしたい
– 名前の定義で設定した範囲が存在するか検証したい
ISREF関数とは?
ISREF(いず れふ)関数は、指定した値が有効なセル参照かどうかを判定する関数です。ref は「reference(参照)」の略です。
引数がセル参照として有効であれば TRUE を返します。数値・文字列・エラー値など、セル参照でないものはすべて FALSE です。
IS系(情報関数)の1つです。セルのデータの種類を確認するための関数ファミリーに属しています。
NOTE
ISREF関数は引数の「参照としての有効性」を判定します。セルに入力されている値がセル参照かどうかを判定するものではありません。たとえば
=ISREF(A1)は「A1 というセル参照は有効か?」を判定します。
ISREF関数の書き方(構文と引数)
基本構文
=ISREF(テストの対象)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| テストの対象 | 必須 | セル参照かどうかを判定したい値 |
引数は1つだけです。省略はできません。
セル参照(A1、Sheet2!B3 など)や名前の定義を指定できます。数値や文字列を直接指定すると FALSE になります。
NOTE
名前の定義を検証するときはダブルクォーテーションを付けません。
=ISREF(売上)は名前の定義「売上」が有効かを判定します。=ISREF("売上")だと文字列扱いになり FALSE です。
ISREF関数の基本的な使い方
まずはシンプルな例で動きを確認してみましょう。
値の種類ごとの判定結果
さまざまな値を ISREF 関数で判定すると、次のような結果になります。
セル参照 A1 を指定した場合:
=ISREF(A1)
結果: TRUE(A1 は有効なセル参照なので TRUE)
数値 100 を直接指定した場合:
=ISREF(100)
結果: FALSE(数値はセル参照ではないので FALSE)
文字列を直接指定した場合:
=ISREF("東京")
結果: FALSE(文字列はセル参照ではないので FALSE)
名前の定義「売上」が存在する場合:
=ISREF(売上)
結果: TRUE(名前の定義が有効な範囲を参照していれば TRUE)
INDIRECT関数の結果を指定した場合:
=ISREF(INDIRECT("A1"))
結果: TRUE(INDIRECT が有効なセル参照を返せば TRUE)
INDIRECT関数に無効なシート名を指定した場合:
=ISREF(INDIRECT("存在しないシート!A1"))
結果: FALSE(参照先が無効なので FALSE)
引数の「値」ではなく「参照としての有効性」を判定する
ここが重要なポイントです。ISREF関数はセルに入っている値ではなく、引数がセル参照として有効かどうかを見ています。
たとえば A1 に数値 100 が入っていても、=ISREF(A1) は TRUE です。A1 というセル参照自体が有効だからです。一方、=ISREF(100) は FALSE です。数値 100 はセル参照ではありません。
TIP
セルの「値の種類」を判定するには ISTEXT関数 や ISNUMBER関数 を使いましょう。ISREF関数は「セル参照として有効かどうか」だけに特化した関数です。
ISREF関数の実務活用パターン
パターン1: INDIRECT関数の参照エラーを事前チェックする
INDIRECT関数で動的にセル参照を組み立てるとき、参照先が無効だとエラーになります。ISREFで事前にチェックしましょう。
=IF(ISREF(INDIRECT(A2&"!B1")),INDIRECT(A2&"!B1"),"シート名を確認")
A2 にシート名が入っている場合を想定しています。参照が有効ならそのセルの値を表示します。無効なら「シート名を確認」と表示します。
シート名の入力ミスによる #REF! エラーを防げます。
パターン2: 名前の定義が存在するか検証する
名前の定義を使った数式で「名前が削除されていた」トラブルを防ぐパターンです。
=IF(ISREF(売上合計),SUM(売上合計),"名前の定義なし")
名前の定義「売上合計」が有効ならSUMで合計します。削除されていれば「名前の定義なし」と表示します。
テンプレートファイルの配布前チェックに便利です。
パターン3: 複数シートからデータを安全に取得する
月別シートからデータを集約するとき、まだ作成されていないシートへの参照でエラーが出る場合があります。
=IF(ISREF(INDIRECT("'"&B2&"'!C5")),INDIRECT("'"&B2&"'!C5"),0)
B2 にシート名(例: 4月、5月……)が入っている場合を想定しています。シートが存在すれば C5 の値を取得します。未作成なら 0 を返します。
年度途中で月別シートを順次追加していく運用で重宝します。
パターン4: OFFSET関数の参照範囲を検証する
OFFSET関数で動的に範囲を指定するとき、範囲外を参照していないかチェックできます。
=IF(ISREF(OFFSET(A1,D2-1,0)),OFFSET(A1,D2-1,0),"範囲外です")
D2 に行番号を入れて動的にデータを取得する場合を想定しています。参照が有効ならデータを取得します。範囲外なら「範囲外です」と表示します。
ユーザーが行番号を手入力するシートでエラーを防げます。
パターン5: データ入力シートの参照チェックリストを作る
複数の名前の定義やシート参照を一括でチェックするリストを作れます。
A列に参照名を並べ、B列に次の数式を入れます。
=IF(ISREF(INDIRECT(A2)),"有効","無効")
A2 にチェックしたい参照名(例: 売上, 経費, Sheet2!A1 など)を入力します。参照が有効なら「有効」、無効なら「無効」と表示します。
テンプレートの配布前やシート構成の変更後に、参照の整合性をまとめて確認できます。
TIP
ISREF関数はINDIRECT関数と組み合わせるのが最も実用的です。INDIRECT関数が返す動的参照の有効性をISREFで検証するパターンは、多くの実務シーンで使えます。
よくあるエラーと対処法
ISREF関数自体がエラーを返すことはほとんどありません。ただし「思った結果にならない」ケースがあります。
| 症状 | 原因 | 対処法 |
|---|---|---|
| 常に TRUE になる | セル参照(A1 など)を直接指定している | セル参照は常に有効。動的参照を検証するなら INDIRECT 経由で指定する |
| 名前の定義で FALSE になる | ダブルクォーテーションを付けている | =ISREF("売上") ではなく =ISREF(売上) と入力する |
| INDIRECT と組み合わせて FALSE になる | シート名のスペルミスやシートの削除 | INDIRECT に渡すシート名を確認する |
| 数値や文字列で FALSE になる | 数値・文字列はセル参照ではない | 正常な動作。セル参照以外は FALSE が正しい結果 |
| #NAME? エラーが出る | 存在しない名前の定義を直接指定した | =ISREF(売上) で「売上」が未定義だと #NAME? になる。INDIRECT 経由にすると FALSE を返せる |
TIP
名前の定義の存在チェックには
=ISREF(INDIRECT("売上"))のように INDIRECT 経由で渡すのがおすすめです。名前が未定義でも #NAME? エラーにならず FALSE が返ります。
IS系12関数の違い・使い分け
IS系関数は、セルに入っているデータの種類を判定するファミリーです。用途に合わせて使い分けましょう。
| 関数名 | 判定内容 | TRUE になる例 |
|---|---|---|
| ISBLANK | 空白セルか | 未入力のセル |
| ISERROR | 任意のエラー値か | #N/A, #VALUE!, #REF! など |
| ISERR | #N/A 以外のエラー値か | #VALUE!, #REF!, #DIV/0! など |
| ISNA | #N/A エラーか | #N/A のみ |
| ISLOGICAL | 論理値(TRUE/FALSE)か | TRUE, FALSE |
| ISNUMBER | 数値か | 100, 3.14, 日付のシリアル値 |
| ISTEXT | 文字列か | “東京”, “123”(文字列型) |
| ISNONTEXT | 文字列以外か | 100, TRUE, 空白 |
| ISFORMULA | 数式が入っているか | =SUM(A1:A10) が入ったセル |
| ISREF(この記事) | 有効なセル参照か | A1, Sheet2!B3, 名前の定義 |
| ISEVEN | 偶数か | 2, 4, 100 |
| ISODD | 奇数か | 1, 3, 99 |
TIP
ISREF関数は他のIS系関数と性質が異なります。ISTEXT関数やISNUMBER関数はセルの値の種類を判定しますが、ISREF関数は引数がセル参照として有効かどうかを判定します。セルの中身が何であっても、参照自体が有効なら TRUE です。
まとめ
ISREF関数は、引数が有効なセル参照かどうかを判定するシンプルな関数です。
- 引数は1つだけ(セル参照・名前の定義・INDIRECT の結果など)
- 有効なセル参照なら TRUE、それ以外は FALSE
- INDIRECT関数と組み合わせるのが実務での定番パターン
- 名前の定義の存在チェックやシート参照の検証に便利
動的参照のエラー防止に、ぜひ活用してみてください。
関連記事
- ISBLANK関数の使い方|空白セルを判定する方法
- ISNUMBER関数の使い方|数値かどうかを確認する方法
- ISTEXT関数の使い方|文字列かどうかを確認する方法
- ISLOGICAL関数の使い方|論理値を判定する方法
- ISNA関数の使い方|#N/Aエラーを判定する方法
- ISERROR関数の使い方|エラー値を判定する方法
- ISFORMULA関数の使い方|数式が入っているか判定する方法
- INDIRECT関数の使い方|セル参照を文字列で指定する方法
- OFFSET関数の使い方|動的な範囲指定の方法
- IFERROR関数の使い方|エラーを非表示にする方法
- IF関数の使い方|条件分岐の基本
- Excelのエラー値一覧と対処法
- Excel関数一覧(機能別)
