はじめに
VBAで作成したユーザーフォームは、デフォルト設定のままだと、意図しない場所に表示されてしまうことがあります。ツールの操作性を向上させるためには、フォームを常に画面の中央や、Excelウィンドウの近くなど、分かりやすい位置に表示させることが重要です。
VBAでは、ユーザーフォームの StartUpPosition
プロパティを変更することで、フォームの初期表示位置を簡単にコントロールできます。この記事では、StartUpPosition
の各設定と、ピクセル単位で表示位置を精密に指定する方法を分かりやすく解説します。
StartUpPosition
プロパティによる自動設定
StartUpPosition
プロパティは、フォームがどこに表示されるかを決める最も簡単な方法です。この設定は、ユーザーフォームのプロパティウィンドウで変更することも、VBAコードで直接指定することもできます。
設定値 | 定数 | 説明 |
0 | vbStartUpManual | 手動。.Top と .Left プロパティで表示位置を自分で指定します。(後述) |
1 | vbStartUpOwner | オーナーの中央。Excelウィンドウ(親フォーム)の中央に表示されます。(デフォルト) |
2 | vbStartUpScreen | 画面の中央。PCモニターの画面全体の中心に表示されます。 |
3 | vbStartUpWindowsDefault | Windowsの規定値。Windowsが決定した位置に表示されます。 |
Google スプレッドシートにエクスポート
サンプルコード
以下のマクロは、MainForm
という名前のユーザーフォームを、それぞれの StartUpPosition
設定で表示します。
' --- 1. Excelウィンドウの中央に表示 ---
Sub ShowFormAtCenterOwner()
With MainForm
.StartUpPosition = 1 ' オーナーの中央 (vbStartUpOwner)
.Show
End With
End Sub
' --- 2. 画面全体の中心に表示 ---
Sub ShowFormAtCenterScreen()
With MainForm
.StartUpPosition = 2 ' 画面の中央 (vbStartUpScreen)
.Show
End With
End Sub
通常は、画面全体の中心に表示される 2
(vbStartUpScreen
) が、利用者にとって最も分かりやすく、おすすめです。
StartUpPosition = 0
で表示位置を手動設定する
StartUpPosition
を 0
(vbStartUpManual
) に設定すると、フォームの .Top
(上からの位置) と .Left
(左からの位置) プロパティを使って、表示位置をピクセル単位で自由に決めることができます。
サンプルコード
以下のマクロは、MainForm
をExcelウィンドウの左上から少し離れた位置(上へ100ピクセル, 左へ200ピクセル)に表示します。
' フォームの表示位置を手動で指定する
Sub ShowFormAtManualPosition()
With MainForm
' まず、手動設定モードにする
.StartUpPosition = 0 ' 手動 (vbStartUpManual)
' 表示位置をピクセルで指定
.Top = Application.Top + 100 ' Excelウィンドウの上端から100ピクセル下
.Left = Application.Left + 200 ' Excelウィンドウの左端から200ピクセル右
' フォームを表示
.Show
End With
End Sub
コードの解説
.Top = Application.Top + 100
: フォームの上端の位置(.Top
)を、Excelアプリケーション自体のウィンドウの上端位置(Application.Top
)を基準に、100
ピクセル下に設定しています。.Left = Application.Left + 200
: 同様に、フォームの左端の位置(.Left
)を、Excelウィンドウの左端位置(Application.Left
)から200
ピクセル右に設定しています。
この方法を使えば、マルチモニター環境でも、意図したモニターのExcelウィンドウの近くにフォームを表示させることができます。
まとめ
今回は、ユーザーフォームの表示位置をコントロールするための方法をご紹介しました。
StartUpPosition
プロパティを使うのが基本。特に2
(画面中央) が便利。- 自由な位置に表示したい場合は、
StartUpPosition
を0
(手動) に設定し、.Top
と.Left
プロパティで座標を指定する。
フォームの表示位置は、ツールの使いやすさに直結する重要な要素です。ユーザーが直感的に操作できるよう、ぜひこのテクニックを活用して、最適な位置にフォームを表示させてみてください。