
Excelマクロでユーザーフレンドリーなフォームを表示!
前回まで、VBA(マクロ)について下記の記事を投稿してきました。
・Excel で マクロ(VBA)を書く
・Excelマクロで変数を使って計算する
・Excelマクロで変数をシートに保存する
今回は、ユーザーフォームの表示の仕方について説明します。
いままでとは違い、ユーザーフォームでは自由にフォーム画面を作成できます。

ユーザーフォームを作成する
業務アプリを作るには、いろいろなフォーム画面を開いたり閉じたりする必要があります。ここではフォーム画面の作り方について説明をします。
[新規]ブックを開いてください。

[開発]タブの[Visual Basic]を押して、VBE画面に切り替えます。

[挿入]の[ユーザーフォーム]を押してください。

ユーザーフォームが、挿入されます。
ユーザーフォームの名前は、[UserForm1]になっています。

[挿入]-[標準モジュール]を押して、マクロを書く領域(標準モジュール)を作成します。

標準モジュール(Module1)が、できたら[Sub フォーム1表示]と入力して[Enter]を押してください。

[フォーム1表示]というマクロを記述します。
Sub フォーム1表示()
UserForm1.Show
End Sub
マクロには下記のように書きます。
UserForm1.Show
マクロを実行します。

マクロを実行すると UserForm1 が表示されます。

ユーザーフォームをデザインする
表示した UserForm1 は、閉じてください。
[ツールボックス]アイコンを押してください。
[ツールボックス]ウィンドウが表示されます。

ラベルを挿入する
ツールボックスの[ラベル]アイコンをクリックして、フォームをクリックするとラベルができます。

左下の[Caption]プロパティを[ユーザーフォーム(1)]に編集します。

マクロを実行すると

ラベルを追加した UserForm1 が、表示されます。

コマンドボタンを挿入する
ツールボックスの[コマンドボタン]アイコンをクリックして、[コマンドボタン]を挿入します。

左下の[Caption]プロパティを[フォーム(2)を表示]に編集します。

ユーザーフォーム2を追加する
[挿入]ー[ユーザーフォーム]と押して UserForm2 を挿入します。
ツールボックスを表示してください。

UserForm1 の時と同様に、ラベルを挿入します。
ラベルの Cpaption プロパティを[ユーザーフォーム(2)]に変更します。
ボタンを押してフォーム2を表示する
UserForm1 のコマンドボタンを押すと UserForm2 が表示されるように設定します。
プロジェクトエクスプローラーの UserForm1 をダブルクリックして、UserForm1 を表示します。

コマンドボタン[フォーム(2)を表示]をダブルクリックしてください。
CommandButton1_Click のマクロモジュールができます。

ここに UserForm2 を表示する命令を書きます。
UserForm2.SHow と書いてください。
Private Sub CommandButton1_Click()
UserForm2.Show
End Sub
マクロを実行して、 UserForm1 を表示してください。

UserForm1 が表示されたら、[フォーム(2)を表示]ボタンを押します。

UserForm2 が、表示されると思います。

UserForm2 をずらすと UserForm1 も、表示されたままだということがわかります。
UserForm1 を閉じようとしても、UserForm2 を閉じなければ UserFrom1 は閉じれないことを確認してください。

UserForm1 が閉じれないのは、[ShowModal]プロパティが[True]に設定されているからです。
UserForm1 を表示して、[ShowModal]プロパティを[False]に設定してみてください。
プロジェクトエクスプローラーの UserForm1 をクリックして、上の[オブジェクトの表示]を押してください。
フォームが表示されたら、左下の[ShowModal]プロパティを[False]にします。

UserForm1 と UserForm2 を表示して、UserForm1 の[×]を押すと、UserForm1 が閉じられると思います。

[ShowModal]プロパティは、フォームを閉じることなく他の処理を実行する設定です。フォーム処理では大変重要な要素になりますので、逐次説明いたします。
[コミュニティのご案内]
ExcelやAccessで困ったときは、コミュニティでお問い合わせください。
Excelを業務で使うコミュニティ(Discord)
