【ExcelVBA・マクロ】ToggleButtonコントロールの使い方|ユーザーフォームでON/OFF切り替えボタンを作る方法【コピペOK】

ExcelVBA

ユーザーフォームでON/OFFの状態を切り替えるボタンを作りたいとき、多くの方はチェックボックスを使います。しかし、押した状態が見た目でもはっきり分かる「押しボタン風」のスイッチを作りたい場合は、ToggleButton(トグルボタン)コントロールが適しています。

この記事では、ToggleButtonの基本的な使い方から、表示・非表示の切り替え、複数のToggleButtonを排他的に使うモード切り替えの実装まで、実践的なコード例とともに解説します。

スポンサーリンク
スポンサーリンク

ToggleButtonとは(CheckBoxとの違い)

ToggleButtonは、クリックするたびに「押されている状態」と「押されていない状態」が切り替わるボタン型のコントロールです。CheckBoxと同じくTrue/Falseを持つValueプロパティで状態を判定できますが、見た目がボタンになっている点が異なります。

  • CheckBox:四角いチェックマークで状態を表す。複数の項目にチェックを入れる場面に向く
  • ToggleButton:ボタンが押し込まれたような見た目で状態を表す。フィルターのON/OFFや表示モードの切り替えなど、操作感を伴うスイッチに向く

ユーザーフォームへの配置と基本プロパティ

VBEでユーザーフォームを開き、ツールボックスからToggleButtonのアイコンをフォーム上にドラッグして配置します。プロパティウィンドウで主に使うプロパティは次の通りです。

  • Name:コード内で参照する名前(例:ToggleButton1
  • Caption:ボタンに表示する文字列
  • Value:押されているかどうか(True=押されている、False=押されていない)

Value(True/False)の取得とClickイベント

ToggleButtonの状態が変化したタイミングはClickイベントで検知します。Valueプロパティを見れば、現在押されている状態かどうかを判定できます。

Private Sub ToggleButton1_Click()

    If ToggleButton1.Value = True Then
        MsgBox "ONになりました"
    Else
        MsgBox "OFFになりました"
    End If

End Sub

実践例1:表示・非表示を切り替えるトグルボタン

詳細設定用のフレームを、ボタンひとつで表示・非表示できるようにする例です。ボタンのCaptionも状態に応じて切り替えます。

Private Sub UserForm_Initialize()

    ' 初期状態はOFF(詳細設定は非表示)
    ToggleButton1.Value = False
    ToggleButton1.Caption = "詳細設定を表示"
    Frame1.Visible = False

End Sub

Private Sub ToggleButton1_Click()

    If ToggleButton1.Value = True Then
        ToggleButton1.Caption = "詳細設定を隠す"
        Frame1.Visible = True
    Else
        ToggleButton1.Caption = "詳細設定を表示"
        Frame1.Visible = False
    End If

End Sub

実践例2:複数のToggleButtonでモード切り替え(排他制御)

ToggleButtonは単体では他のボタンと連動しないため、複数のボタンから1つだけを選ばせたい場合は、クリックされたボタン以外を自分でOFFにする処理が必要です。オプションボタン(ラジオボタン)に近い動きを、ボタン風の見た目で実現できます。

Private Sub ToggleButton1_Click()
    If ToggleButton1.Value = True Then
        ToggleButton2.Value = False
        ToggleButton3.Value = False
        Call ApplyMode("週次")
    Else
        Call ApplyMode("")
    End If
End Sub

Private Sub ToggleButton2_Click()
    If ToggleButton2.Value = True Then
        ToggleButton1.Value = False
        ToggleButton3.Value = False
        Call ApplyMode("月次")
    Else
        Call ApplyMode("")
    End If
End Sub

Private Sub ToggleButton3_Click()
    If ToggleButton3.Value = True Then
        ToggleButton1.Value = False
        ToggleButton2.Value = False
        Call ApplyMode("年次")
    Else
        Call ApplyMode("")
    End If
End Sub

Private Sub ApplyMode(ByVal modeName As String)

    If modeName = "" Then
        LabelStatus.Caption = "集計モードを選択してください"
    Else
        LabelStatus.Caption = modeName & "集計モードが選択されています"
    End If

End Sub

コード内で他のToggleButtonのValueプロパティをFalseに変更していますが、これはプログラムからの代入であり、ユーザーのクリック操作ではないため、Clickイベントは発生しません。そのため、無限ループの心配をせずに他のボタンの状態をリセットできます。

Captionを状態に応じて動的に変える

「フィルターON」「フィルターOFF」のように、ボタンに現在の状態を文字として表示すると、ユーザーが状態を一目で把握しやすくなります。ValueTrue/Falseに応じてCaptionを書き換える処理を、Clickイベントの中に必ず入れておくとよいでしょう。

Private Sub ToggleButtonFilter_Click()

    If ToggleButtonFilter.Value = True Then
        ToggleButtonFilter.Caption = "フィルターON"
        ActiveSheet.Range("A1").AutoFilter
    Else
        ToggleButtonFilter.Caption = "フィルターOFF"
        If ActiveSheet.AutoFilterMode Then
            ActiveSheet.AutoFilterMode = False
        End If
    End If

End Sub

まとめ

ToggleButtonは、CheckBoxと同じくValueプロパティで状態を管理しつつ、ボタンらしい見た目で操作感を伝えられるコントロールです。単体では表示・非表示の切り替えに、複数を組み合わせれば排他的なモード切り替えUIにと、用途に応じて使い分けられます。

Clickイベント内でCaptionを状態に合わせて更新する一手間を加えるだけで、ユーザーにとって分かりやすいフォームになります。ぜひユーザーフォームの設計に取り入れてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました