【Excel VBA】同じブックの2つのシートを左右に並べて同時表示する方法

入力用のシートと集計結果のシート、データシートとグラフシートなど、1つのExcelブック内で複数のシートを頻繁に行き来しながら作業することはよくあります。

Excelの「新しいウィンドウを開く」機能と「整列」機能を使えば、2つのシートを左右に並べて同時に表示できますが、毎回手作業で行うのは少し面倒です。VBAを使えば、この一連の操作をボタン一つで実行できます。

この記事では、同じブックの異なるシートを2つのウィンドウで左右に表示するためのVBAコードを解説します。


目次

完成したVBAコード

以下が、現在開いているブックの最初のシートと最後のシートを、左右に並べて表示するVBAコードです。

Sub ArrangeSheetsSideBySide()

    ' 変数を宣言します
    Dim targetBook As Workbook
    Set targetBook = ThisWorkbook
    
    ' 念のため、シートが2枚以上あるか確認
    If targetBook.Worksheets.Count < 2 Then
        MsgBox "このマクロを実行するには、シートが2枚以上必要です。", vbExclamation
        Exit Sub
    End If
    
    ' --- 1. 新しいウィンドウを作成 ---
    ' これで同じブックのウィンドウが2つになります
    targetBook.NewWindow
    
    ' --- 2. このブックのウィンドウだけを、左右に並べて整列 ---
    targetBook.Windows.Arrange ArrangeStyle:=xlArrangeVertical
    
    ' --- 3. 各ウィンドウで表示するシートを切り替え ---
    ' 1番目のウィンドウで、最初のシートを表示
    targetBook.Windows(1).Activate
    targetBook.Worksheets(1).Activate
    
    ' 2番目のウィンドウで、最後のシートを表示
    targetBook.Windows(2).Activate
    targetBook.Worksheets(targetBook.Worksheets.Count).Activate
    
    ' 元のウィンドウ(左側)をアクティブに戻しておく(任意)
    targetBook.Windows(1).Activate
    
    MsgBox "シートを左右に並べて表示しました。"

End Sub

コードのポイント解説

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

targetBook.NewWindow

Workbookオブジェクトの.NewWindowメソッドを実行すると、そのブックの表示ウィンドウが複製されます。これにより、画面上には同じファイル名のウィンドウが2つ(例: MyBook.xlsx:1MyBook.xlsx:2)表示される状態になります。ファイルが複製されるわけではなく、あくまで「表示用の窓口」が増えるだけです。

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

targetBook.Windows.Arrange ArrangeStyle:=xlArrangeVertical

Windows.Arrangeメソッドは、ウィンドウを整列させる命令です。

  • targetBook.Windows.Arrange: Workbookオブジェクトから呼び出すことで、そのブックに属するウィンドウだけを整列の対象にします。他の開いているExcelファイルには影響を与えません。
  • ArrangeStyle:=xlArrangeVertical: ウィンドウを左右に並べて表示します(垂直に分割)。ここをxlArrangeHorizontalにすると、上下に並べて表示できます。

③ ウィンドウとシートのアクティブ化

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

ウィンドウを整列させた後、それぞれのウィンドウで目的のシートを表示させるには、**「まずウィンドウをアクティブにし、次にその中でシートをアクティブにする」**という2段階の操作が必要です。

  • targetBook.Windows(1).Activate: ブックに属する1番目のウィンドウをアクティブにします。
  • targetBook.Worksheets(1).Activate: アクティブになったウィンドウの中で、1番目のワークシートを表示します。

サンプルコードでは、2番目のウィンドウで最後のシートを表示するために、Worksheets.Countプロパティを使い、動的に最後のシートを指定しています。


元の表示に戻すには?

左右に並んだ表示を元の一つのウィンドウ表示に戻したい場合は、非常に簡単です。どちらか一方のウィンドウの右上の「閉じる(×)」ボタンをクリックするだけです。

ウィンドウを閉じても、ブック(ファイル)自体が閉じるわけではありません。もう一方のウィンドウが自動的に最大化され、通常の表示に戻ります。


まとめ

2つのシートを並べて表示する手順は、以下の3ステップです。

  1. **.NewWindow**で、同じブックの表示ウィンドウを2つに増やす。
  2. **.Windows.Arrange**で、それらのウィンドウを左右(または上下)に整列させる。
  3. ウィンドウを番号で指定してアクティブ化し、それぞれで目的のシートをアクティブにする。

このマクロをクイックアクセスツールバーなどに登録しておけば、複雑なシート構成のブックでも、作業効率を大幅に向上させることができます。

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

この記事を書いた人

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

目次