ブック・シートが存在するか調べる


サイトをご覧になった方からリクエストをいただきました。「特定のブックを開いているか、どうやってチェックしたらいいですか?」と。また、別の方から「'合計'という名前のシートがあるかどうか調べたい」というメールもちょうだいしました。これらは同じ考え方で実現できますので、一緒に解説しましょう。

ブックが開いているか調べる

このテクニックは、実は「ファイルの操作」の「現在開いているブックの一覧を取得する」で解説しています。念のため同じコードを再度ご紹介します。

Sub Sample01()
    Dim wb As Workbook, flag As Boolean
    For Each wb In Workbooks
        If wb.Name = "Book1.xlsx" Then flag = True
    Next wb
    If flag = True Then
        MsgBox "Book1 を開いています。", vbInformation
    Else
        MsgBox "Book1 は開いていません", vbInformation
    End If
End Sub

ブックの名前をチェックしている部分が「wb.Name = "Book1.xlsx"」です。ここは、拡張子を付けた方が安全でしょう。ただし、まだ保存していないブック名を調べたいときには拡張子を付けてはいけません。ファイル名と拡張子に関する詳しい情報は「ファイルを閉じる」をご覧下さい。

ブック名は大文字と小文字を区別します。Book1.xlsx を調べるのに「BOOK1.xlsx」や「Book1.XLSX」ではいけません。ファイル名の大文字と小文字は、保存するときの指定で異なります。調べたいブックの正式名称がどちらかわからない場合は、次のようにすると安全です。

Sub Sample02()
    Dim wb As Workbook, flag As Boolean
    For Each wb In Workbooks
        If UCase(wb.Name) = "BOOK1.XLSX" Then flag = True
    Next wb
    If flag = True Then
        MsgBox "Book1 を開いています。", vbInformation
    Else
        MsgBox "Book1 は開いていません", vbInformation
    End If
End Sub

UCase 関数は、引数に指定した文字列を大文字に変換します。

シートが存在するか調べる

基本的な考え方は一緒です。すべてのワークシートを表す Worksheets コレクションからひとつずつ Worksheetを取り出して、名前を調べます。次のサンプルでは、[合計]という名前のワークシートが存在するかどうかを調べます。

Sub Sample03()
    Dim ws As Worksheet, flag As Boolean
    For Each ws In Worksheets
        If ws.Name = "合計" Then flag = True
    Next ws
    If flag = True Then
        MsgBox "[合計]シートがあります", vbInformation
    Else
        MsgBox "[合計]シートはありません", vbInformation
    End If
End Sub