【Excel VBA】Excelウィンドウのサイズを自由に変更し、元に戻す方法

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でウィンドウサイズを操作する際の、安全で推奨される手順は以下の通りです。

  1. 処理の最初に、現在の**.WindowState, .Width, .Heightを変数に記憶**する。
  2. ウィンドウの状態を**.WindowState = xlNormal**に変更する。
  3. 目的の**.Width.Height**を設定する。
  4. (マクロの主処理を実行する)
  5. 処理の最後に、記憶しておいた変数を使い、元の幅、高さ、状態に復元する。

この「記憶と復元」のパターンを実践することで、ユーザーの作業環境を尊重した、親切で安定性の高いマクロを作成することができます。

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

この記事を書いた人

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

目次