「INDIRECT関数で組み立てたシート名、本当に存在しているのかな……」。動的に参照先を切り替えるシートで、リンク切れエラーに悩まされた経験はありませんか。
参照先が有効かどうかを事前に判定できれば、エラーが画面に出る前に対処できますよね。そんなときに便利なのがISREF関数です。
スプレッドシートのISREF関数を使えば、指定した値が有効なセル参照かどうかをTRUE/FALSEで判定できます。この記事では、基本構文からINDIRECT関数との組み合わせ、IS系関数との違いまでまとめて紹介します。
スプレッドシートのISREF関数とは?
ISREF関数(読み方: いず りふ)は、指定した値が有効なセル参照かどうかを判定する関数です。
名前は英語の「IS REFerence(参照ですか?)」からきています。
引数に渡した値がセル参照(A1やSheet2!B3など)ならTRUE。文字列・数値・無効な参照ならFALSEを返します。
ISREF関数にできることをまとめると、次のとおりです。
- セル参照かどうかをTRUE/FALSEで返す
- INDIRECT関数で組み立てた参照先が有効かを事前に確認する
- 存在しないシート名や範囲名を指す参照を検出する
- IF関数と組み合わせて参照エラーを未然に防ぐ
NOTE
ISREF関数はGoogleスプレッドシートとExcelの両方で使えます。同じ構文で動くので、ファイルをやり取りするときも安心ですよ。
ISREF関数の書き方(構文と引数)
ISREF関数の基本構文はとてもシンプルです。
=ISREF(値)
引数は1つだけ、判定したい値や式を入れるだけです。
| 引数 | 必須 | 説明 |
|---|---|---|
| 値 | 必須 | 参照かどうかを判定したい値・式・セル参照 |
戻り値は次のとおりです。
| 引数の種類 | 戻り値 |
|---|---|
| セル参照(A1、B2:C5など) | TRUE |
| 別シートの参照(Sheet2!A1) | TRUE |
| INDIRECT関数で生成した有効な参照 | TRUE |
| 文字列・数値・論理値 | FALSE |
| 存在しないシート名・範囲名 | FALSE |
引数を直接書くか、INDIRECT関数の結果を渡すかで使い方の幅が広がりますよ。
ISREF関数の基本的な使い方
実際の動作を見てみましょう。次のサンプルでは、それぞれの値を判定した結果を並べています。
| 数式 | 結果 | 説明 |
|---|---|---|
=ISREF(A1) | TRUE | A1セルへの参照なのでTRUE |
=ISREF(B2:C5) | TRUE | 範囲もセル参照として扱われる |
=ISREF("A1") | FALSE | 文字列なのでFALSE |
=ISREF(123) | FALSE | 数値はセル参照ではない |
=ISREF(Sheet2!A1) | TRUE | 別シートの参照もTRUE |
=ISREF(INDIRECT("A1")) | TRUE | INDIRECTで生成した有効な参照 |
=ISREF(INDIRECT("ZZZ1")) | TRUE | 存在する列なのでTRUE |
=ISREF(NoSheet!A1) | FALSE | 存在しないシート名はFALSE |
ポイントは、引数を「"A1"」のように文字列で渡すとFALSEになることです。あくまで参照そのものを判定する関数なので、文字列リテラルは参照として扱われません。
INDIRECT関数との組み合わせがいちばん便利
ISREF関数の真価が発揮されるのは、INDIRECT関数と組み合わせたときです。
INDIRECT関数は文字列をセル参照に変換する関数で、シート名やセル番地を動的に組み立てるときに使います。ただ、参照先が存在しないと「#REF!」エラーになってしまうのが弱点ですよね。
ISREFを使えば、INDIRECTの結果が有効な参照かを事前に確認できます。
=ISREF(INDIRECT(A1&"!B2"))
この式は、A1セルに入ったシート名と「!B2」を組み合わせた参照が有効かを判定します。シート名が存在すればTRUE、存在しなければFALSEになります。
TIP
INDIRECTでよくあるトラブルは、シート名の打ち間違いや、削除済みシートを参照してしまうケースです。ISREFを噛ませておくと「画面にエラーが出る前に気付ける」ようになりますよ。
IF関数と組み合わせてエラーを未然に防ぐ
ISREFをIF関数とセットで使うと、参照エラーを表示せずにメッセージへ置き換えられます。
=IF(ISREF(INDIRECT(A1&"!B2")), INDIRECT(A1&"!B2"), "シート名が見つかりません")
A1のシート名が存在すれば該当セルの値を表示し、見つからなければ「シート名が見つかりません」と表示します。
ダッシュボードや集計表で参照先を切り替える運用をしているとき、このパターンを覚えておくと表のレイアウトが崩れないので便利ですよ。
IS系関数との違い(ISNUMBER・ISBLANK・ISTEXTとの比較)
ISREF以外にもIS系関数はたくさんあります。それぞれの判定対象を整理しておきましょう。
| 関数 | 判定対象 | TRUEになる例 |
|---|---|---|
| ISREF | セル参照かどうか | =ISREF(A1) |
| ISNUMBER | 数値かどうか | =ISNUMBER(123) |
| ISTEXT | 文字列かどうか | =ISTEXT("abc") |
| ISBLANK | 空白セルかどうか | =ISBLANK(A1)(A1が空のとき) |
| ISFORMULA | 数式が入っているか | =ISFORMULA(A1)(A1が=B1+C1のとき) |
ISREFが他のIS系関数と違うのは、「セルの中身」ではなく「引数として渡された式そのもの」を見る点です。
たとえば=ISNUMBER(A1)はA1の中身が数値かを見ますが、=ISREF(A1)はA1という参照表現そのものが有効な参照かを見ます。判定の視点が一段違うことを意識しておくと混乱しませんよ。
NOTE
論理値(TRUE/FALSE)の判定にはTRUE関数やFALSE関数の理解も役立ちます。IS系関数とセットで覚えておくと、論理判定の幅が広がりますよ。
ISREF関数の実務的な活用例
実際の業務で使えるパターンを3つ紹介しますね。
活用例1: 月次シート切り替えダッシュボード
「2026年04月」「2026年05月」のように月ごとにシートを分けて運用しているとき、INDIRECTで参照先を切り替えるダッシュボードを作るパターンです。
=IF(ISREF(INDIRECT(A1&"!売上合計")), INDIRECT(A1&"!売上合計"), "未作成")
A1にシート名を入れておけば、該当月のシートが作成済みなら売上を表示、未作成なら「未作成」と表示できます。
活用例2: 名前付き範囲の存在チェック
スプレッドシートでは「データ」→「名前付き範囲」で範囲に名前を付けられます。ただ、名前付き範囲が削除されると参照先がエラーになりますよね。
=IF(ISREF(INDIRECT("売上テーブル")), "範囲OK", "範囲が見つかりません")
このように事前確認しておくと、テンプレートの引き継ぎ時にもトラブルを防げますよ。
活用例3: フォーム入力されたシート名の検証
ユーザーが入力フォームでシート名を指定するような運用では、入力ミスへの備えが欠かせません。ISREFで参照可能性を判定し、エラーがあれば入力者に通知するフローを作れます。
=IF(ISREF(INDIRECT(B2&"!A1")), "シート名OK", "シート名を確認してください")
入力チェックを関数だけで実現できるので、Apps Scriptを書くほどでもない簡易検証に向いていますよ。
ISREF関数でよくあるエラーと対処法
ISREFを使っていて遭遇しやすいトラブルをまとめます。
文字列を渡してしまいFALSEが返る
=ISREF("A1")のように文字列リテラルを渡すと必ずFALSEになります。セル参照そのものを評価したいときは引用符を外すか、INDIRECT関数で文字列を参照に変換してから渡しましょう。
#REF!エラーが出てしまう
INDIRECTで存在しないシート名を渡すと、ISREFはFALSEを返してくれます。ただしINDIRECT単体を別の場所で使っていると#REF!エラーが出てしまいます。エラーが出る場所を特定して、その箇所もIF+ISREFでガードしましょう。
#NAME?エラーが出る
関数名のスペルミス(「ISREFF」など)が原因です。関数候補のサジェストをよく確認しながら入力するのが確実ですよ。
まとめ
スプレッドシートのISREF関数について、基本構文から実務での活用パターンまで紹介してきました。最後にポイントを振り返っておきましょう。
| ポイント | 内容 |
|---|---|
| 構文 | =ISREF(値) |
| 戻り値 | 参照ならTRUE、それ以外はFALSE |
| 主な用途 | INDIRECT関数の参照先チェック・エラー防止 |
| 相棒の関数 | INDIRECT・IF・名前付き範囲 |
| 似た関数 | ISNUMBER・ISTEXT・ISBLANK・ISFORMULA |
ISREF関数は単体で使う場面はあまり多くありませんが、INDIRECT関数と組み合わせると一気に活躍の場が広がります。動的に参照先を切り替えるダッシュボードや、名前付き範囲を多用するテンプレートで重宝する関数ですよ。
参照エラーで画面が崩れる前に、ISREFをIF関数とセットで仕込んでおきましょう。
関連記事もぜひ参考にしてみてください。
