【Excel VBA】同じブックの新しいウィンドウを作成して操作する方法 (NewWindow)

一枚のシートにデータを入力し、別のシートでその集計結果をリアルタイムで見たい、といった場合に、Excelの「新しいウィンドウを開く」機能は非常に便利です。これにより、同じブックを2つのウィンドウで同時に表示し、それぞれで異なるシートやセル範囲を表示できます。

VBAを使えば、このウィンドウの作成と操作を自動化できます。この記事では、NewWindowメソッドを使い、新しいウィンドウを作成してオブジェクト変数に格納し、ウィンドウの整列や表示シートの切り替えまでを行う方法を解説します。


目次

完成したVBAコード

以下が、新しいウィンドウを作成し、元のウィンドウと左右に並べて、それぞれで別のシートを表示する実用的なVBAコードです。

Sub CreateAndArrangeNewWindow()

    ' 変数を宣言します
    Dim targetBook As Workbook
    Dim newlyCreatedWindow As Window
    
    ' このマクロが書かれているブックを操作対象とする
    Set targetBook = ThisWorkbook
    
    ' 念のため、ブックにシートが2枚以上あるか確認
    If targetBook.Worksheets.Count < 2 Then
        MsgBox "このマクロを実行するには、シートが2枚以上必要です。", vbExclamation
        Exit Sub
    End If

    ' --- 1. 新しいウィンドウを作成し、オブジェクト変数に格納 ---
    ' .NewWindowメソッドは、作成した新しいWindowオブジェクトを返します
    Set newlyCreatedWindow = targetBook.NewWindow
    
    ' --- 2. 新しいウィンドウの情報を表示 ---
    ' ウィンドウのCaptionは「ブック名:2」のようになります
    MsgBox "新しいウィンドウ「" & newlyCreatedWindow.Caption & "」を作成しました。"
    
    ' --- 3. 2つのウィンドウを左右に並べて表示 ---
    targetBook.Windows.Arrange ArrangeStyle:=xlArrangeVertical
    
    ' --- 4. 各ウィンドウで別々のシートを表示 ---
    ' 元のウィンドウ(1番目)でSheet1をアクティブにする
    targetBook.Windows(1).Activate
    targetBook.Worksheets("Sheet1").Activate
    
    ' 新しいウィンドウ(2番目)でSheet2をアクティブにする
    targetBook.Windows(2).Activate
    targetBook.Worksheets("Sheet2").Activate

    ' 新しいウィンドウを閉じる場合は .Close を使います
    ' newlyCreatedWindow.Close

End Sub

コードのポイント解説

① 新しいウィンドウの作成: .NewWindow

Set newlyCreatedWindow = targetBook.NewWindow

Workbookオブジェクトの.NewWindowメソッドを実行すると、そのブックを表示する新しいウィンドウが作成されます。

重要なのは、このメソッドが作成されたWindowオブジェクトそのものを戻り値として返すことです。これをSetキーワードを使ってオブジェクト変数(newlyCreatedWindow)に格納することで、VBAからその新しいウィンドウを直接かつ確実に操作できるようになります。

② ウィンドウの整列: .Windows.Arrange

targetBook.Windows.Arrange ArrangeStyle:=xlArrangeVertical

WorkbookオブジェクトのWindowsプロパティは、そのブックに属するすべてのウィンドウの集まり(コレクション)を返します。このコレクションに対して.Arrangeメソッドを実行すると、ウィンドウを整列させることができます。

  • ArrangeStyle:=xlArrangeVertical: ウィンドウを左右に並べます(垂直に分割)。
  • ArrangeStyle:=xlArrangeHorizontal: ウィンドウを上下に並べます(水平に分割)。

③ 特定のウィンドウの操作

targetBook.Windows(1).Activate
targetBook.Worksheets("Sheet1").Activate

targetBook.Windows(1)のようにインデックス番号を指定することで、特定のウィンドウを操作対象にできます。.Activateでウィンドウを最前面に表示してから、その中で表示したいシートを.Activateすることで、「1番目のウィンドウではSheet1を、2番目のウィンドウではSheet2を表示する」といった制御が可能になります。


まとめ

同じブックの別ウィンドウをVBAで操作する際の基本は、以下の通りです。

  1. myWorkbook.NewWindow を実行して、新しいウィンドウを作成する。
  2. 戻り値として返される**Windowオブジェクトを変数に格納**する (Set newWin = ...)。
  3. myWorkbook.Windowsコレクションを使って、ウィンドウ全体を整列させたり、個別のウィンドウを操作したりする。

このテクニックは、複数のシートや広範囲のデータを同時に見ながら作業するようなマクロで、ユーザーにとって分かりやすい画面表示を自動で構築したい場合に非常に役立ちます。

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

この記事を書いた人

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

目次