入力用のシートと集計結果のシート、データシートとグラフシートなど、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:1
とMyBook.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ステップです。
- **
.NewWindow
**で、同じブックの表示ウィンドウを2つに増やす。 - **
.Windows.Arrange
**で、それらのウィンドウを左右(または上下)に整列させる。 - ウィンドウを番号で指定してアクティブ化し、それぞれで目的のシートをアクティブにする。
このマクロをクイックアクセスツールバーなどに登録しておけば、複雑なシート構成のブックでも、作業効率を大幅に向上させることができます。