はじめに
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() など)の中で活用することで、ユーザーの操作にリアルタイムで応答する、直感的で使いやすいフォームを作成できます。
