ユーザーフォームを使用して、ユーザーに選択形式の質問を表示させて、選択されたボタンの値によって処理を分岐させる処理の作り方について説明します。
作成するフォームのイメージ
作成するユーザーフォームのイメージはこんな感じです。
オプションボタン(ラジオボタン)で3つのボタンのうちどれか1つが選択できるようになっています。
ボタンA・B・Cのどれかを選択したあとに右下の「選択」ボタンを押すと何のボタンが選択されたのかを表示します。実務で使用するときは押されたボタンによってそのあとの処理を分岐させて使用します。
選択ボタンクリック後にメッセージを表示(選択されたボタンの名称を表示する)
空のユーザーフォームを作成する
まずは空のユーザーフォームを作成していきます。
VBEの挿入タブから「ユーザーフォーム」を選択してください。
ユーザーフォームを挿入すると左のツリーの「フォーム」の下に「UserForm」が表示されて、空のユーザーフォームが中央に表示されます。
オプションボタンを配置する
空のユーザーフォームにオプションボタン3つとコマンドボタンを配置していきます。
ツールボックスから選択して、配置したい場所に作成していきます。
オプションボタンをグループ化する
オプションボタンを並べたら、Cntrキーを押しながらすべて選択し、右クリックで「グループ化」をクリックします。
ボタンのオブジェクト名とCaptionを変更する
オプションボタンの名前を変更していきます。
デフォルトは「OptionButton1~3」になっていましたが、「ボタンA~C」に変更していきます。
ボタンに表示する名称を変更するときはCaptionの値を変更します。
オブジェクト名はVBAコードで使用する名前です。
オブジェクト名も合わせてボタンと一致するような名称に変えておくと管理がしやすいです。
コマンドボタン(四角いボタン)の名称は「選択」に変更しました。
作成後のユーザーフォームの状態
ボタンの配置と名前の変更が終わった状態です。
フォームの表面はこれで完成しましたが、まだコードを何も書いていないのでこれではまだ動かない状態です。
ユーザーフォームのVBAコードを作成
フォームの表面を作成したあとは、「選択」ボタンがクリックされたときに何のボタンが選択されていたか、メッセージボックスに表示するマクロを作成していきます。
ユーザーフォームのマクロを記述するときは左のメニューでコードの表示に切り替えて書いていきます。もしくはフォーム作成画面でボタンをダブルクリックするとコード作成画面に切り替わって、ボタンをクリックしたときのマクロが自動的に追加されます。
ユーザーフォームのコードに「CommandButton_選択」がクリックされたときの処理を書いていきます。
IF関数でオプションボタンA~Cの状態をそれぞれ調べて、選択されている状態(True)だったら、「ボタンが選択されました」とメッセージを表示させます。
Private Sub CommandButton_選択_Click()
'選択ボタンがクリックされたときの処理
’選択されているボタンの名前をメッセージに表示する
If Me.OptionButtonA.Value = True Then
MsgBox "ボタンAが選択されました。"
ElseIf Me.OptionButtonB.Value = True Then
MsgBox "ボタンBが選択されました。"
ElseIf Me.OptionButtonC.Value = True Then
MsgBox "ボタンCが選択されました。"
End If
’ユーザーフォームを閉じる
Unload UserForm1
End Sub
ユーザーフォームを開くときの処理も記述しておきます。
ユーザーフォームが表示されるときに動く処理は「UserForm_Initialize」に書きます。
ここではデフォルトで選択しておくボタンなどを設定しておくと良いです。
Private Sub UserForm_Initialize()
'ユーザーフォームを開くときの処理
'オプションボタンAを選択しておく
Me.OptionButtonA.Value = True
End Sub
これでユーザーフォームの表面とボタンが押されたときに動く処理の両方が用意できました。
シート上にユーザーフォームを立ち上げるボタンを設置
ユーザーフォームは何かのきっかけを作らないと表示できないので、今回はシート上にユーザーフォームを呼び出すためのボタンを設置しました。
「ユーザーフォームの表示」ボタンを押すとユーザーフォームが立ち上がるようにします。
このボタンが呼び出すマクロは標準モジュールに記述します。
ボタンが押されたらUserForm1を表示させるようにしています。
Sub 開始ボタン_Click()
’ユーザーフォームを表示する
UserForm1.Show
End Sub
マクロの流れはこんな感じです。
シート上の「ユーザーフォーム表示」ボタンを押す
↓
「Sub 開始ボタン_Click()」が動く
ユーザーフォームが呼ばれる
↓
「Private Sub UserForm_Initialize()」が動く
デフォルト選択がされた状態でユーザーフォームが表示される
これで一連の流れが完成しました!
一連の動作の確認
シートのボタンを押すところから一連の流れを確認していきます。
まずシート上の「ユーザーフォームの表示」ボタンをクリックします。
ユーザーフォームが表示されました。
デフォルトでは「ボタンA」が選択されています。
「ボタンB」を選択に変更して、「選択」ボタンをクリックします。
「ボタンBが選択されました」のメッセージボックスが表示されました。
今回はオプションボタンを使ったフォームの作り方の説明だったのでシンプルにここで処理は終わりですが、実務で使用する場合は、これを応用してユーザーが選択した値によってそのあとの処理を分岐させて使用することになると思います。
ユーザーフォームの関連記事
ユーザーフォームを使った記事は↓でも紹介しています。
よかったらこちらもご覧ください。
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。
・記事の内容は適宜変更することがありますのでご了承ください。