はじめに
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
コレクションとループを組み合わせることで効率的に処理できる。
この基本を応用すれば、ユーザーが選択したオプションに応じて、実行する処理を分岐させたり、計算結果を変えたりと、よりインタラクティブで多機能なツールを作成することができます。