一枚のシートにデータを入力し、別のシートでその集計結果をリアルタイムで見たい、といった場合に、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で操作する際の基本は、以下の通りです。
myWorkbook.NewWindow
を実行して、新しいウィンドウを作成する。- 戻り値として返される**
Window
オブジェクトを変数に格納**する (Set newWin = ...
)。 myWorkbook.Windows
コレクションを使って、ウィンドウ全体を整列させたり、個別のウィンドウを操作したりする。
このテクニックは、複数のシートや広範囲のデータを同時に見ながら作業するようなマクロで、ユーザーにとって分かりやすい画面表示を自動で構築したい場合に非常に役立ちます。