Excelの「分割」機能を使うと、一つのワークシートを2つまたは4つの領域(ペイン)に分けて、それぞれを独立してスクロールできます。広大なシートの異なる箇所を同時に見比べたい場合に非常に便利な機能です。
VBAマクロで画面操作を自動化する際、ユーザーがウィンドウを分割しているかどうかを事前に知りたい場合があります。この記事では、ActiveWindow.Panes.Count
プロパティを使い、ウィンドウの分割状態を簡単に確認する方法を解説します。
「ウィンドウ枠の分割」と「ウィンドウ枠の固定」の違い
はじめに、よく似た機能である「ウィンドウ枠の固定」との違いを明確にしておきましょう。
- ウィンドウ枠の分割: 画面を2つまたは4つの独立したスクロール領域に分けます。この記事で解説する
Panes.Count
で確認できるのは、こちらの機能です。 - ウィンドウ枠の固定: 特定の行や列を固定し、スクロールしても常に表示されるようにします。
今回の方法は、「ウィンドウ枠の分割」に対してのみ有効です。
完成したVBAコード
以下が、現在アクティブなウィンドウのペイン(分割された領域)の数を数え、その結果に応じてメッセージを表示するVBAコードです。
Sub CheckWindowPaneCount()
' 変数を宣言します
Dim currentWindow As Window
Dim paneCount As Long
Dim message As String
' 現在アクティブなウィンドウを操作対象とする
Set currentWindow = ActiveWindow
' --- 1. ウィンドウのペイン数を取得 ---
' PanesコレクションのCountプロパティで数を取得できます
paneCount = currentWindow.Panes.Count
' --- 2. ペイン数に応じてメッセージを分岐 ---
Select Case paneCount
Case 1
message = "このウィンドウは分割されていません。"
Case 2
message = "このウィンドウは2つのペインに分割されています。(縦または横)"
Case 4
message = "このウィンドウは4つのペインに分割されています。(縦横両方)"
Case Else
' 通常、3つのペインは存在しない
message = "予期せぬペイン数です: " & paneCount & "個"
End Select
' --- 3. 結果を表示 ---
MsgBox message, vbInformation, "ウィンドウの分割状態"
End Sub
コードのポイント解説
ActiveWindow.Panes.Count
このコードの核心は、ActiveWindow.Panes.Count
という一行にあります。
ActiveWindow
: 現在アクティブになっているExcelのウィンドウオブジェクトを指します。.Panes
: そのウィンドウ内にあるすべての「ペイン」の集まり(コレクション)です。.Count
: コレクションに含まれるアイテムの数を返します。
つまり、ActiveWindow.Panes.Count
は、**「アクティブなウィンドウが、いくつのペインに分割されているか」**という数を直接返してくれます。
ペイン数の判定
.Panes.Count
が返す値は、通常以下の3パターンのいずれかです。
1
: ウィンドウは分割されていません。2
: ウィンドウが縦または横のどちらか一方に分割されています。4
: ウィンドウが縦横両方に分割されています。
(Excelの標準機能では、ウィンドウを3つのペインに分割することはできません。)
サンプルコードでは、Select Case
文を使って、取得したペイン数に応じた分かりやすいメッセージを表示するようにしています。
まとめ
ウィンドウの分割状態を確認するVBAのコードは非常にシンプルです。
ActiveWindow.Panes.Count
このプロパティの値を調べるだけで、ウィンドウが分割されているかどうか、また分割されている場合はそのペインの数を簡単に取得できます。ユーザーの表示環境に応じてマクロの動作を最適化したい場合などに、このテクニックをご活用ください。