見出し画像

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)