【Excel VBA】「新しいウィンドウ」で開いた複製ウィンドウをすべて一括で閉じる方法

Excelの「新しいウィンドウを開く」機能は、複数のシートを同時に見比べる際に非常に便利ですが、作業が終わった後に Book1:1, Book1:2, Book2:1, Book2:2 … のようにウィンドウが散らかってしまい、一つずつ閉じるのが面倒になることがあります。

VBAを使えば、開いているすべてのブックの複製ウィンドウ(:2:3…)だけを検出し、一括で閉じる「お片付けマクロ」を簡単に作成できます。


目次

完成したVBAコード

以下が、すべてのブックの複製ウィンドウを閉じ、最後に残ったウィンドウを最大化するVBAコードです。

Sub CloseAllDuplicateWindows()
    
    ' 変数を宣言します
    ' Excel.Window型で宣言すると、入力補完が効いて便利です
    Dim win As Excel.Window
    
    ' --- 1. アプリケーションで開かれているすべてのウィンドウをループ ---
    ' For Eachループで、開いているウィンドウを一つずつチェックします
    For Each win In Application.Windows
    
        ' --- 2. ウィンドウ番号が1より大きいか(複製か)を判定 ---
        ' .WindowNumberプロパティが、ウィンドウの番号を返します
        If win.WindowNumber > 1 Then
            ' 複製ウィンドウ(2番目以降)であれば、そのウィンドウを閉じる
            win.Close
        End If
        
    Next win
    
    ' --- 3. 残ったウィンドウを最大化して表示を整える ---
    ' ウィンドウが一つもなくなった場合のエラーを避ける
    If Application.Windows.Count > 0 Then
        ActiveWindow.WindowState = xlMaximized
    End If
    
    MsgBox "複製ウィンドウをすべて閉じました。"
    
End Sub

コードのポイント解説

① Application.Windows コレクション

For Each win In Application.Windows

Application.Windowsは、現在Excelアプリケーションで開かれているすべてのブックの、すべてのウィンドウの集まり(コレクション)です。特定のブックに限定したThisWorkbook.Windowsとは異なり、Excel全体で開いているウィンドウを操作対象にします。

② ウィンドウ番号を調べる: .WindowNumber

これが、複製ウィンドウを特定するための最も重要なプロパティです。

  • **.WindowNumber**は、同じブックに対するウィンドウが何番目に開かれたものかを示す数値を返します。
  • どのブックであれ、元の**主となるウィンドウは必ずWindowNumber1**になります。
  • 「新しいウィンドウを開く」で作成された複製ウィンドウは、2, 3, 4… と連番が振られます。

したがって、If win.WindowNumber > 1 Thenという条件式を使うことで、元のウィンドウ(:1)は残しつつ、複製ウィンドウ(:2以降)だけを正確に特定することができます。

③ 複製ウィンドウを閉じる: .Close

win.Close

Windowオブジェクトに対して.Closeメソッドを実行します。 複製ウィンドウ(例: Book1:2)を閉じても、ブックファイルそのものが閉じるわけではありません。あくまでその「表示」が閉じられるだけで、元のウィンドウ(Book1:1)は開いたまま残ります。

④ 表示の最大化: .WindowState

ActiveWindow.WindowState = xlMaximized

すべての複製ウィンドウを閉じた後、最後にアクティブだったウィンドウが中途半端なサイズで残っている可能性があります。このコードでウィンドウを最大化することで、画面を整理して作業を再開しやすくしています。


まとめ

散らかった複製ウィンドウを一度に閉じる処理は、非常にシンプルです。

  1. For Eachループで、Application.Windowsコレクションを巡回する。
  2. ループの中で、各ウィンドウの**.WindowNumberプロパティ**の値を確認する。
  3. もし値が**1より大きければ**、それは複製ウィンドウなので**.Close**メソッドで閉じる。

このマクロをクイックアクセスツールバーなどに登録しておけば、ウィンドウを多用する作業の効率が格段にアップします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次