VBAマクロを実行する際に、特定のウィンドウサイズで見せたい、または複数のアプリケーションを画面に並べるためにExcelウィンドウの大きさを調整したい、といったニーズがあります。
VBAを使えば、Excelのウィンドウサイズをプログラムで正確にコントロールすることが可能です。この記事では、ウィンドウのサイズを変更し、さらにマクロの処理が終わった後でユーザーが設定していた元のサイズに復元するという、丁寧で実用的な方法を解説します。
完成したVBAコード
以下が、ウィンドウの現在の状態とサイズを一時的に記憶し、指定したサイズに変更した後、再び元の状態に戻すVBAコードです。
Sub ResizeAndRestoreWindow()
' 変数を宣言します
Dim originalState As Long
Dim originalWidth As Double
Dim originalHeight As Double
' 変更後のウィンドウサイズを定数で定義します
Const NEW_WIDTH As Double = 800
Const NEW_HEIGHT As Double = 600
' --- 1. 元のウィンドウの状態とサイズを記憶 ---
With ActiveWindow
originalState = .WindowState
originalWidth = .Width
originalHeight = .Height
End With
' --- 2. ウィンドウサイズを変更 ---
MsgBox "ウィンドウのサイズを幅" & NEW_WIDTH & "、高さ" & NEW_HEIGHT & "に変更します。"
With ActiveWindow
' 幅と高さを変更するには、まずWindowStateを「標準」にする必要があります
.WindowState = xlNormal
' 新しい幅と高さを設定
.Width = NEW_WIDTH
.Height = NEW_HEIGHT
End With
' --- 3. 元のウィンドウサイズに戻す ---
MsgBox "ウィンドウのサイズと状態を元に戻します。"
With ActiveWindow
' 記憶しておいた元の幅と高さを設定
.Width = originalWidth
.Height = originalHeight
' 最後に、元の状態(最大化など)も復元
.WindowState = originalState
End With
MsgBox "ウィンドウの状態を元に戻しました。"
End Sub
コードのポイント解説
① 元の状態を記憶する
With ActiveWindow
originalState = .WindowState
originalWidth = .Width
originalHeight = .Height
End With
マクロがユーザーの作業環境を勝手に変更してしまわないように、まずActiveWindow
の現在の状態をすべて変数に記憶しておくのが丁寧なマクロの作法です。
.WindowState
: ウィンドウが「最大化(xlMaximized
)」「最小化(xlMinimized
)」「標準(xlNormal
)」のいずれの状態かを取得します。.Width
/.Height
: ウィンドウの幅と高さを「ポイント」という単位で取得します。
② WindowStateを「標準 (xlNormal)」にする
.WindowState = xlNormal
これが、ウィンドウサイズを変更する上で最も重要なステップです。ウィンドウの幅(.Width
)と高さ(.Height
)のプロパティは、ウィンドウの状態が「標準」(元のサイズに戻す状態)のときにしか変更できません。
ウィンドウが最大化や最小化されている状態で幅や高さを変更しようとしても、値は反映されません。そのため、サイズを変更する直前に、必ずxlNormal
に設定する必要があります。
③ 幅と高さを設定 (.Width / .Height)
.Width = NEW_WIDTH
.Height = NEW_HEIGHT
ウィンドウの状態をxlNormal
にした後で、.Width
と.Height
プロパティに数値を代入することで、ウィンドウのサイズが指定した大きさに変更されます。
④ 元の状態に復元する
.Width = originalWidth
.Height = originalHeight
.WindowState = originalState
マクロの主処理が終わった後、最初に記憶しておいた変数を使い、ウィンドウの幅、高さ、そして状態(最大化など)を元通りに復元します。これにより、ユーザーはマクロ実行前と全く同じ環境で作業を再開できます。
まとめ
VBAでウィンドウサイズを操作する際の、安全で推奨される手順は以下の通りです。
- 処理の最初に、現在の**
.WindowState
,.Width
,.Height
を変数に記憶**する。 - ウィンドウの状態を**
.WindowState = xlNormal
**に変更する。 - 目的の**
.Width
と.Height
**を設定する。 - (マクロの主処理を実行する)
- 処理の最後に、記憶しておいた変数を使い、元の幅、高さ、状態に復元する。
この「記憶と復元」のパターンを実践することで、ユーザーの作業環境を尊重した、親切で安定性の高いマクロを作成することができます。