はじめに
VBAのユーザーフォームを作成する際、「チェックボックスがオンのときだけ、特定のテキストボックスを入力可能にしたい」「オプションボタンの選択に応じて、表示される項目を切り替えたい」といった、状況に応じた動的な制御が必要になることがよくあります。
コントロールの .Enabled
(有効/無効)プロパティや .Visible
(表示/非表示)プロパティをVBAコードで操作することで、このようなインタラクティブなフォームを簡単に作成できます。
この記事では、ユーザーの操作に応じて、他のコントロールの使用可否や表示状態をリアルタイムに切り替える、実践的なテクニックを解説します。
コントロールの状態を切り替えるV-BAサンプルコード
ここでは、よくある「送付先の住所入力」フォームを例に、「上記と同じ」というチェックボックスがオンになったら、送付先入力欄を無効化(グレーアウト)し、「入力不要」というラベルを表示する、という処理を作成します。
ユーザーフォームのコード
このコードは、SameAsBillingAddress_CheckBox
という名前のチェックボックスの _Click()
イベント内に記述します。
' 「上記と同じ」チェックボックス(SameAsBillingAddress_CheckBox)がクリックされたときの処理
Private Sub SameAsBillingAddress_CheckBox_Click()
' チェックボックスがオン(True)かオフ(False)かを変数に格納
Dim isChecked As Boolean
isChecked = Me.SameAsBillingAddress_CheckBox.Value
'--- Enabledプロパティで入力欄の使用可否を切り替える ---
' isCheckedがTrueなら、EnabledはFalse(無効)になる
' isCheckedがFalseなら、EnabledはTrue(有効)になる
Me.ShippingAddress_TextBox.Enabled = Not isChecked
Me.ShippingCity_TextBox.Enabled = Not isChecked
Me.ShippingZipCode_TextBox.Enabled = Not isChecked
'--- Visibleプロパティでラベルの表示/非表示を切り替える ---
' isCheckedがTrueなら、VisibleはTrue(表示)になる
' isCheckedがFalseなら、VisibleはFalse(非表示)になる
Me.InputNotRequired_Label.Visible = isChecked
End Sub
実行前の準備
- ユーザーフォームを作成します。
- フォーム上に、「チェックボックス」を1つ、「テキストボックス」を3つ、「ラベル」を1つ配置します。
- それぞれの
(Name)
プロパティを、コードに合わせてSameAsBillingAddress_CheckBox
,ShippingAddress_TextBox
,ShippingCity_TextBox
,ShippingZipCode_TextBox
,InputNotRequired_Label
に変更します。 - フォームを表示し、チェックボックスをクリックすると、テキストボックスとラベルの状態が切り替わります。
コードの解説
.Enabled = Not isChecked
コントロールの .Enabled
プロパティは、そのコントロールが操作可能かどうかを制御します。True
であれば操作可能(有効)、False
であれば操作不可(無効、グレーアウト)になります。
Not
演算子は、ブール値(True
/False
)を反転させます。
- チェックボックスがオン (
isChecked
=True
):Not isChecked
はFalse
になるため、テキストボックスは無効になります。 - チェックボックスがオフ (
isChecked
=False
):Not isChecked
はTrue
になるため、テキストボックスは有効になります。
このように、Not
演算子を使うことで、チェックボックスの状態とコントロールの有効/無効をスマートに連動させることができます。
.Visible = isChecked
コントロールの .Visible
プロパティは、そのコントロールが画面に表示されるかどうかを制御します。True
であれば表示、False
であれば非表示になります。
こちらは Not
を使わず、チェックボックスの状態をそのまま代入しています。
- チェックボックスがオン (
isChecked
=True
): ラベルのVisible
もTrue
になり、表示されます。 - チェックボックスがオフ (
isChecked
=False
): ラベルのVisible
もFalse
になり、非表示になります。
まとめ
今回は、VBAを使ってユーザーフォームのコントロールの有効/無効、表示/非表示を切り替える方法を解説しました。
- 操作の可否を切り替えるには
.Enabled
プロパティ(True
/False
) - 見える/見えないを切り替えるには
.Visible
プロパティ(True
/False
) Not
演算子を使うと、ブール値を反転させ、トグル処理を簡単に記述できる。
これらのプロパティをイベントプロシージャ(_Click()
など)の中で活用することで、ユーザーの操作にリアルタイムで応答する、直感的で使いやすいフォームを作成できます。