【VBA】指定のブックが開いていたら閉じる
作成日:2022-12-02
更新日:2025-10-04

指定されたパスのブックが開いていたら閉じる
' Close a workbook by full path if it is open
' フルパスを指定して、開いていれば閉じる(なければ何もしない)
Public Sub CloseBookIfOpened( _
        ByVal fullPath As String, _
        Optional ByVal saveChanges As Boolean = False)
    Dim wb As Workbook
    
    For Each wb In Application.Workbooks
        ' フルパス比較(大文字小文字無視)
        If StrComp(wb.FullName, fullPath, vbTextCompare) = 0 Then
            wb.Close SaveChanges:=saveChanges
            Exit Sub
        End If
    Next wb
    
    ' 見つからなければ何もしない
End Subポイント
- Workbooksコレクションから対象を探す。
 - FullNameプロパティでフルパス一致を確認。
 - 見つかったら 
.Close SaveChanges:=True/Falseを実行。 - 見つからなければ何もしない。
 
Always compare with FullName, not just Name, to avoid closing the wrong workbook.
誤って別のブックを閉じないために、Name ではなく FullName で比較する
使い方例
' 保存して閉じる
Call CloseBookIfOpened("C:\Temp\Test.xlsx", True)
' 保存せず閉じる
Call CloseBookIfOpened("C:\Temp\Test.xlsx", False)
Referenced Insights & Citations
- Walkenbach, J. (2010). Excel 2010 Power Programming with VBA. Wiley.
 - Microsoft Docs: Workbook.FullName property
 
| Full Path|フルパス |
| Workbooks Collection|Workbooksコレクション |
| FullName Property|FullNameプロパティ |
| SaveChanges|保存フラグ |
| StrComp|文字列比較 |

StrCompについて詳しく
      
    
2022-12-02
      編集後記:
      この記事の内容がベストではないかもしれません。
    
記事一覧
- 
          
            
      
      

[VBA]SaveAs名前を付けて保存 【VBA】名前を付けて保存|SaveAs - 
          
            
      
      

[VBA]Horizontal Paste1D array 【VBA】一次元配列を横方向にシートに貼り付け【範囲をリサイズする】 - 
          
            
      
      

[VBA]Cells or Range 【VBA】.Cells と .Range の使い分け目安|数千か数万か - 
          
            
      
      

[VBA]Dirで存在確認 【VBA】フォルダとファイルの存在確認|FSOよりもDir - 
          
            
      
      

[VBA]Paste 2D Arrayresize once 【VBA】二次元配列をシートに貼り付け【範囲をリサイズする】 - 
          
            
      
      

テーブルをソートする 【VBA】Excelテーブルを昇順で並び替える|ソート