ブックの中に、特定のワークシートが存在するかどうかを調べるには、どうしたらいいでしょう。この手の判定は、マクロを使えば簡単です。たとえば、次のようなコードです。
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関数の解説は、下記のページをご覧ください。
もちろん、存在しないワークシートを指定すると、参照式はエラーになります。
つまり「=シート名!セルのアドレス」という参照式がエラーになったら、そのワークシートは存在しないということです。数式がエラーになるかどうかは、ISERROR関数で判定します。
別シートへの参照式がエラーになるかどうかを判定するだけですから、セルのアドレスは別にA1でなくてもいいです。
Excel 2007で追加されたIFERROR関数を使うなら、次のような感じですね。
「0」と表示されているのは、INDIRECT(A2&"!A1")がエラーにならず、そのシートのセルA1を参照しているということです。今回は、どのシートのセルも空欄にしていますので、参照した結果として「0」が表示されています。今回のテーマは「ワークシートが存在しているかどうかを判定する」ですから、「存在しない」ということがわかればいいでしょう。
注意すべきは、「2010年」や「5月」のように、シート名が数値で始まっているケースです。数値で始まっている名前のシートを参照するときは、「=シート名!セルのアドレス」ではなく
='シート名'!セルのアドレス
のように、シート名をシングルコーテーション(')で囲まなければなりません。
したがって、INDIRECT関数で生成する参照式も次のようになります。