【VBA】ユーザーフォームのコントロールを有効/無効、表示/非表示に切り替える方法

目次

はじめに

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. ユーザーフォームを作成します。
  2. フォーム上に、「チェックボックス」を1つ、「テキストボックス」を3つ、「ラベル」を1つ配置します。
  3. それぞれの (Name) プロパティを、コードに合わせて SameAsBillingAddress_CheckBox, ShippingAddress_TextBox, ShippingCity_TextBox, ShippingZipCode_TextBox, InputNotRequired_Label に変更します。
  4. フォームを表示し、チェックボックスをクリックすると、テキストボックスとラベルの状態が切り替わります。

コードの解説

.Enabled = Not isChecked

コントロールの .Enabled プロパティは、そのコントロールが操作可能かどうかを制御します。True であれば操作可能(有効)、False であれば操作不可(無効、グレーアウト)になります。

Not 演算子は、ブール値(True/False)を反転させます。

  • チェックボックスがオン (isChecked = True): Not isCheckedFalse になるため、テキストボックスは無効になります。
  • チェックボックスがオフ (isChecked = False): Not isCheckedTrue になるため、テキストボックスは有効になります。

このように、Not 演算子を使うことで、チェックボックスの状態とコントロールの有効/無効をスマートに連動させることができます。

.Visible = isChecked

コントロールの .Visible プロパティは、そのコントロールが画面に表示されるかどうかを制御します。True であれば表示、False であれば非表示になります。

こちらは Not を使わず、チェックボックスの状態をそのまま代入しています。

  • チェックボックスがオン (isChecked = True): ラベルの VisibleTrue になり、表示されます。
  • チェックボックスがオフ (isChecked = False): ラベルの VisibleFalse になり、非表示になります。

まとめ

今回は、VBAを使ってユーザーフォームのコントロールの有効/無効、表示/非表示を切り替える方法を解説しました。

  • 操作の可否を切り替えるには .Enabled プロパティ(True/False
  • 見える/見えないを切り替えるには .Visible プロパティ(True/False
  • Not 演算子を使うと、ブール値を反転させ、トグル処理を簡単に記述できる。

これらのプロパティをイベントプロシージャ(_Click() など)の中で活用することで、ユーザーの操作にリアルタイムで応答する、直感的で使いやすいフォームを作成できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次