
~初心者が必ず混乱するポイントを完全整理~
Excel VBAで自動化をしていると、必ずぶつかる疑問があります。
「このブック、もう開いてる?」
「同じファイルを二重に開いてしまわないか不安…」
実務でもトラブルになりやすいテーマなので、
正しい判定方法とNG例をまとめて解説します。
結論:判定方法は「1つだけ」覚えればOK
Excel VBAで
ブックが開いているかどうかを判定する王道はこれです👇
Workbooks コレクションに存在するかどうかを調べる
なぜ判定が必要なのか?
開いているかを判定せずに処理すると…
-
同じブックを二重に Open
-
「既に開いています」エラー
-
意図しないブックを操作
-
保存されない/上書き事故
👉 実務では必須の防御処理です。
❌ よくある間違い(初心者がやりがち)
❌ If Workbooks("Sample.xlsx") <> Nothing Then
If Workbooks("Sample.xlsx") Is Nothing Then
👉 これはエラーになります
理由:Workbooks("名前") は
存在しない時点でエラーを出す仕様だからです。
✅ 正しい判定方法①(最も一般的)
エラーを利用して判定する方法
Function IsWorkbookOpen(bookName As String) As Boolean
Dim wb As Workbook
On Error Resume Next
Set wb = Workbooks(bookName)
On Error GoTo 0
IsWorkbookOpen = Not wb Is Nothing
End Function
使い方
If IsWorkbookOpen("Sample.xlsx") Then
MsgBox "すでに開いています"
Else
MsgBox "まだ開いていません"
End If
👉 実務で最も使われる定番パターンです。
✅ 正しい判定方法②(For Each で調べる)
Function IsWorkbookOpen(bookName As String) As Boolean
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name = bookName Then
IsWorkbookOpen = True
Exit Function
End If
Next wb
IsWorkbookOpen = False
End Function
特徴
-
エラー処理が不要
-
処理が直感的
-
初心者にも理解しやすい
👉 教育用・ブログ向きな書き方です。
フルパスでは判定できない点に注意
Workbooks("C:\Test\Sample.xlsx") ' ❌ 使えない
Workbooks で指定できるのは👇
✅ ファイル名のみ(Sample.xlsx)
同名ブックがある場合の注意点(超重要)
もし、
-
別フォルダに
-
同じ名前の Excel ファイル
が存在すると👇
実務での対策
-
同名ファイルを扱わない設計にする
-
もしくは「開く前に必ず閉じる」
開いていれば使い、開いていなければ開く例
Dim wb As Workbook
Dim path As String
path = "C:\Test\Sample.xlsx"
If IsWorkbookOpen("Sample.xlsx") Then
Set wb = Workbooks("Sample.xlsx")
Else
Set wb = Workbooks.Open(path)
End If
👉 実務でめちゃくちゃ使うパターンです。
「開いていないブック」を直接指定することはできない
ここ、超重要です。
Set wb = Workbooks("Sample.xlsx")
これは👇
-
❌ 開いていない → エラー
-
✅ 開いている → 取得できる
👉 Open 済み専用です。
よくある質問
Q. シートが表示されていなくても開いている?
👉 はい、開いています
ScreenUpdating = False で非表示でも
**Workbooks に存在すれば「開いている」**扱いです。
まとめ(ここだけ覚えればOK)
✅ 開いているかの判定は Workbooks にあるかどうか
✅ フルパスではなく ファイル名で判定
✅ 同名ファイルは事故の元
✅ 実務では「判定 → 開く or 使う」が基本構成