ユーザーフォームで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」のように、ボタンに現在の状態を文字として表示すると、ユーザーが状態を一目で把握しやすくなります。ValueのTrue/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を状態に合わせて更新する一手間を加えるだけで、ユーザーにとって分かりやすいフォームになります。ぜひユーザーフォームの設計に取り入れてみてください。


コメント