はじめに
VBAのユーザーフォームで、ユーザーに複数の選択肢の中から「必要なもの」を自由に選んでもらうような場面では、「チェックボックス」コントロールが最適です。アンケートの回答や、適用したいオプションの選択など、様々な用途で活用できます。
ユーザーがチェックを入れたかどうかは、チェックボックスの .Value プロパティを調べることで簡単に判定できます。
この記事では、ユーザーフォーム上に配置した複数のチェックボックスの状態(オン/オフ)を取得し、どの項目が選択されたのかをプログラムで判別する方法を解説します。
チェックボックスの状態を取得するVBAサンプルコード
このマクロは、ユーザーフォームに配置された「確認」ボタンがクリックされたときに、3つのチェックボックスの状態を調べ、選択されている項目のリストをメッセージボックスに表示します。
ユーザーフォームのコード
' 「確認」ボタン(ConfirmButton)がクリックされたときの処理
Private Sub ConfirmButton_Click()
'== 変数を定義します ==
Dim selectedOptions As String
Dim i As Long
Dim targetCheckbox As MSForms.CheckBox
selectedOptions = "選択されたオプション:" & vbCrLf
'== 1番から3番までのチェックボックスをループ処理 ==
For i = 1 To 3
' Controlsコレクションを使って、名前でチェックボックスを指定
Set targetCheckbox = Me.Controls("OptionCheckBox" & i)
' .Valueプロパティで、チェックがオン(True)かオフ(False)かを判定
If targetCheckbox.Value = True Then
' チェックがオンなら、Caption(表示テキスト)を結果に追加
selectedOptions = selectedOptions & "・" & targetCheckbox.Caption & vbCrLf
End If
Next i
'== 結果をメッセージボックスに表示 ==
MsgBox selectedOptions, vbInformation, "選択結果"
End Sub
実行前の準備
- ユーザーフォームを作成します。
- フォーム上に「チェックボックス」を3つと、「コマンドボタン」を1つ配置します。
- 3つのチェックボックスの
(Name)プロパティを、上から順にOptionCheckBox1,OptionCheckBox2,OptionCheckBox3に変更します。Captionはそれぞれ「Eメールで通知」「SMSで通知」「電話で通知」のように設定します。 - コマンドボタンの
(Name)をConfirmButtonに、Captionを確認に変更します。 - フォームのコードモジュールに上記のコードを貼り付け、フォームを表示して使用します。
コードの解説
Set targetCheckbox = Me.Controls("OptionCheckBox" & i)
For ループを使って、OptionCheckBox1, OptionCheckBox2, OptionCheckBox3 という名前のコントロールを順番に処理しています。
Me.Controls(...): フォーム上のコントロールを、名前(文字列)で指定してアクセスするためのコレクションです。ループカウンタiを使って"OptionCheckBox" & iとすることで、効率的に複数のコントロールを扱うことができます。
If targetCheckbox.Value = True Then
この一行が、チェックボックスの状態を判定する核心部分です。
.Value: チェックボックスのValueプロパティは、チェックが入っている(オン)状態であればTrueを、入っていなければ(オフ)Falseを返します。- この
If文で、ValueがTrueの場合、つまり「ユーザーがその項目を選択した場合」のみ、中の処理が実行されます。
selectedOptions = selectedOptions & "・" & targetCheckbox.Caption & vbCrLf
チェックがオンだった場合に、そのチェックボックスの .Caption プロパティ(画面に表示されているテキスト、例: “Eメールで通知”)を取得し、結果を格納する文字列変数 selectedOptions に追加しています。
まとめ
今回は、ユーザーフォームのチェックボックスが選択されているかどうかをVBAで判定する方法を解説しました。
- チェックボックスの状態は
.Valueプロパティで確認できる(オン =True, オフ =False)。 - 複数のコントロールは、
Controlsコレクションとループを組み合わせることで効率的に処理できる。
この基本を応用すれば、ユーザーが選択したオプションに応じて、実行する処理を分岐させたり、計算結果を変えたりと、よりインタラクティブで多機能なツールを作成することができます。
【AI×就労支援】Neuro Dive(ニューロダイブ)で先端ITを学び、スペシャリストとしての就職を目指しませんか?
最後に宣伝をさせてください。
「AIやデータサイエンスを仕事にしたい」 「でも、独学には限界が…」
そんな方に知ってほしいのが、日本初の”先端IT特化型”就労移行支援『Neuro Dive』です。
IT職種への就職率80%超、職場定着率95%超という実績は、信頼の証。「学びたい」を「仕事」に繋げるプロフェッショナルです。
ご興味があれば、ぜひ公式サイトをチェックしてみてください。
