ワークシートの存在を調べる


ブックの中に、特定のワークシートが存在するかどうかを調べるには、どうしたらいいでしょう。この手の判定は、マクロを使えば簡単です。たとえば、次のようなコードです。

Sub Sample1()
    Dim i As Long
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "横浜" Then
            MsgBox "[横浜]シートは存在します"
            Exit For
        End If
    Next i
End Sub

これを、関数でやってみましょう。マクロを使わずに[横浜]シートが存在するかどうかを判定します。

あるシート(ここではSheet1)から、別のセルを参照するには

=シート名!セルのアドレス

とします。

[東京]というシート名がA列に入力されていますので、それを参照するようにしましょう。こんなときには、INDIRECT関数を使います。

INDIRECT関数の解説は、下記のページをご覧ください。

INDIRECT関数の使い方

もちろん、存在しないワークシートを指定すると、参照式はエラーになります。

つまり「=シート名!セルのアドレス」という参照式がエラーになったら、そのワークシートは存在しないということです。数式がエラーになるかどうかは、ISERROR関数で判定します。

別シートへの参照式がエラーになるかどうかを判定するだけですから、セルのアドレスは別にA1でなくてもいいです。

Excel 2007で追加されたIFERROR関数を使うなら、次のような感じですね。

「0」と表示されているのは、INDIRECT(A2&"!A1")がエラーにならず、そのシートのセルA1を参照しているということです。今回は、どのシートのセルも空欄にしていますので、参照した結果として「0」が表示されています。今回のテーマは「ワークシートが存在しているかどうかを判定する」ですから、「存在しない」ということがわかればいいでしょう。

注意すべきは、「2010年」や「5月」のように、シート名が数値で始まっているケースです。数値で始まっている名前のシートを参照するときは、「=シート名!セルのアドレス」ではなく

='シート名'!セルのアドレス

のように、シート名をシングルコーテーション(')で囲まなければなりません。

したがって、INDIRECT関数で生成する参照式も次のようになります。