【Excel VBA】同名のブックが開かれているかを確認する

はじめに

今回は、同名のブックが開かれているかを確認する方法をご紹介します。
ブック名のチェック時に注意すべき点や、その対処法もご紹介します。

この記事を読むメリット
  • 同名のブックが開かれているかを確認する方法が分かります
  • 新規ブックに対してチェックする際の注意点も解説します
  • コピペで使える実践的なコードを掲載しています

前提

同名のブックが開かれているかを確認する場合、ブック名を取得して確認します。
その場合注意しなければならない点として、新規ブックは拡張子を持たない点が挙げられます。

以下画像の赤枠箇所を取得してチェックするのですが、以下が保存済みブックと新規ブックの違いです。

保存済みブック
新規ブック

サンプルコード

同名のブックが開かれているかを確認(ブック名のチェック)

拡張子もチェック対象に含めるパターンと、含めないパターンの2パターンのサンプルをご紹介します。
使用用途に合わせて使い分けを実施してください。

拡張子を含めてチェックする(新規ブックを勘案しない)

サンプルコード
Public Sub checkOpenBookName()
    Dim wb As Workbook          ' Workbookオブジェクト
    Dim checkBookName As String ' チェック対象ブック名

    ' チェック対象のブック名を設定
    checkBookName = "vba-hack.xlsm"

    ' 全てのブック分ループ
    For Each wb In Workbooks

        If wb.Name = checkBookName Then

            ' ブック名がチェック対象ブック名と同名である場合

            MsgBox wb.Name & "が開かれています", vbExclamation
            Exit For
        End If
    Next wb
End Sub

拡張子を含めずチェックする(新規ブックを勘案する)

サンプルコード
Public Sub checkOpenBookNameForExcludeExtension()
    Dim fso As New FileSystemObject ' FileSystemObjectインスタンス
    Dim wb As Workbook              ' Workbookオブジェクト
    Dim checkBookName As String     ' チェック対象ブック名

    ' チェック対象のブック名を設定
    checkBookName = "Book1"

    ' 全てのブック分ループ
    For Each wb In Workbooks

        If fso.getBaseName(wb.Name) = fso.getBaseName(checkBookName) Then

            ' ブック名がチェック対象ブック名と同名である場合

            MsgBox fso.getBaseName(wb.Name) & "が開かれています", vbExclamation
            Exit For
        End If
    Next wb
End Sub
りゅう

FileSystemObjectの参照設定を実施してください。
設定方法は以下の記事にて紹介しています。
また、FileSystemObjectのGetBaseNameプロパティを使用しています。
そちらの参考記事もよろしければご参照ください。

最後に

今回は、同名のブック名が開かれているかを確認する方法をご紹介しました。
本記事が、皆さんのお力になれば幸いです!

オススメの書籍
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA