教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】画面内のフォームの表示位置を指定するにはどうすればいいの?教えて!

構文

構文は以下の通りです。

UserForm.StartupPosition = 値

解説

フォームの表示位置を制御するには、UserFormオブジェクトのStartupPositionプロパティを使用します。値には以下の4つが使えます。

内容
0 手動指定
1 親ウィンドウの中央に配置
2 画面の中央に配置
3 画面の左上端に配置

使用例

UserForm1.StartupPosition = 2

使い方

具体的な使い方を紹介します。

Private Sub UserForm_Initialize()
    Me.StartupPosition = 2 ' 画面の中央に配置
End Sub

StartupPositionプロパティに値を代入することで、フォームが表示される位置を指定することができます。上記は画面の中央にフォームを配置します。

プログラミング例

以下に、プログラミング例を幾つか紹介します。

例1: 手動で位置指定

Sub ShowFormManually()
    ' Manual(手動)に指定
    UserForm1.StartUpPosition = 0
    ' フォームの左端の位置を200ポイントに指定
    UserForm1.Left = 200
    ' フォームの上端の位置を100ポイントに指定
    UserForm1.Top = 100
    UserForm1.Show
End Sub

この例では、StartUpPositionプロパティを0に設定して手動で位置を指定し、フォームを画面上の指定した座標に表示しています。

例2: オーナーの中央に表示

Sub ShowFormCenteredOnOwner()
    ' CenterOwner(オーナーの中央)に指定
    UserForm1.StartUpPosition = 1
    ' このブックをオーナーとして指定
    UserForm1.Show vbModeless, ThisWorkbook
End Sub

この例では、StartUpPositionプロパティを1に設定してフォームをオーナーの中央に表示しています。vbModelessを指定することで、モーダルではなく非モーダルなフォームとして表示しています。

例3: 画面の右下に表示

Sub ShowFormBottomRight()
    ' Manual(手動)に指定
    UserForm1.StartUpPosition = 0
    ' 画面の幅 - フォームの幅 - 余白の幅
    UserForm1.Left = Application.Width - UserForm1.Width - 20
    ' 画面の高さ - フォームの高さ - 余白の高さ
    UserForm1.Top = Application.Height - UserForm1.Height - 20
    UserForm1.Show
End Sub

この例では、StartUpPositionプロパティを0に設定して手動で位置を指定し、フォームを画面の右下に表示しています。余白として20ポイントを確保していますが、必要に応じて値を調整してください。

まとめ

UserFormのStartupPositionプロパティを適切に設定することで、フォームの表示位置を手動で指定したり、親ウィンドウの中央や画面の中央に配置したりすることができます。是非活用してください。