PeaceJetのブログ

金融系の社内エンジニアをやりながら、マーケティングやデータ分析などもやっています。

今開いているブック以外、すべて閉じる方法【ExcelVBA・エクセルマクロ】

今回は、今開いているブックを除いて、他のブックすべて閉じる方法について、
考えてみたいと思います。

ポイント

  1. 開いているワークブックをカウントし、名前を取得する関数を作成する。

関数の作成

この関数は、今現在開いているワークブックのファイル名を配列で返します。

Function GetOpenBN()

    ReDim MyArray(0) As Variant
    Dim n As Integer
    
    For i = 1 To Workbooks.Count
    
        n = UBound(MyArray)
        ReDim Preserve MyArray(n + 1)
        
        'ファイル名を配列に格納する。
        MyArray(i - 1) = Workbooks(i).Name
        
    Next i
    
    GetBookName = MyArray
    
End Function

呼び出して使ってみよう。

  • 関数の戻り値は配列なので、取り出し方に注意しよう。
  • 「On Error Resume Next」が入っていることに注意。

※ブックを閉じるときに、上書きをしないように「SaveChanges:=False」を指定しています。

Sub OtherWorkbookClose()
For j = 0 To UBound(GetOpenBN) - 1
            
    On Error Resume Next
    If Not InStr(GetOpenBN()(j + 1), ThisWorkbook.Name) > 0 Then
               
        Workbooks(GetOpenBN()(j + 1)).Close SaveChanges:=False
                
    End If
    
Next j