こんにちは、Ryoです。
ユーザーフォームに配置できるコントロールの1つとしてOptionButtonがありますが、このボタンは複数配置しても1つがONであれば他は全てOFFとなりますので用途によってはオプションボタンをグループ分けしたいこともあるかと思います。今回はGrouNameプロパティを使用したグループ化や解除設定方法等について書いていきます。
1.サンプル概要
ユーザーフォーム上にOptionButtonを4つ、グループ設定用のコマンドボタン1と設定解除/ボタンOFFを行うコマンドボタン2をそれぞれ配置しています。
初期状態ではOptionButton1~4のいずれかをONにすると他はOFFになりますが、「Group設定」ボタンを押すとOptionButton1と2、3と4でそれぞれグループ分けされるので、それぞれのグループで1つのOptionButtonを選択できるようになります。
「解除」ボタンを押すとグループ設定の解除と全てのボタンをOFFにしますので、初期状態に戻ります。
2.サンプルコード
◆構成
UserForm構成は以下の通りになります。

◆CommandButton1(Group設定)
Private Sub CommandButton1_Click()
'OptionButton1と2をGroupA、
'OptionButton3と4をGroupBに設定
OptionButton1.GroupName = "GroupA"
OptionButton2.GroupName = "GroupA"
OptionButton3.GroupName = "GroupB"
OptionButton4.GroupName = "GroupB"
'↓↓オプションボタン番号を変数として扱いたい場合の記述例
'Dim i As Integer
'For i = 1 To 4
'With UserForm1.Controls("OptionButton" & i)
'Select Case i
'Case Is < 3
' .GroupName = "GroupA"
'Case Else
' .GroupName = "GroupB"
'End Select
'End With
'Next i
'OptinButton1,OptionButton2・・・のような場合に変数で処理するには
'上述のように例)UserForm1.Controls("OptionButton” & i)とすれば対応可。
'OptionButton & i.GroupName =・・・のような記述は不可。
'1つの例ですが、このような形で記述しておくとオプションボタン、
'グループ増減などに融通が利くので対処しやすいと思います。
End Sub
オプションボタンをグループ化するにはGroupNameプロパティを利用します。
構文:オブジェクト.GroupName =name
グループにまとめられたオプションボタンはグループ内では1つのオプションボタンのみオンにすることができます。その際に他のオプションボタンは自動的にOFFとなります。
このサンプルではOptionButton1と2をGroupA、3と4をGroupBに設定していますので、構文にそってOptionButton1.GroupName = “GroupA”のようにそれぞれ記述していけばOKです。
但し、この記述では変更や追加などが生じた際に対処が煩わしいのでOptionButton番号を変数として扱う場合の参考例をコメントに記載しています。この例に記述したようにフォームに配置するボタン等のコントロールはUserForm1.Controls(“OptionButton” & i)のような形で番号を変数として対処できますので、知っておくと便利です。
◆CommandButton2(グループ設定解除、各ボタンOFF)
Private Sub CommandButton2_Click()
'OptionButtonのグループ設定解除、各ボタンOFF(未選択)
Dim i As Integer
For i = 1 To 4
With UserForm1.Controls("OptionButton" & i)
.GroupName = "" 'グループ解除
.Value = False 'ボタンOFF(未選択状態)
End With
Next i
End Sub
グループ解除して初期状態に戻したい場合、コマンドボタン1で設定したグループ名を消せばOKですので、.GroupName = “”としています。
各ボタンのON/OFFも初期状態に戻しますので、.Value=FalseとすることでボタンはOFFに設定できます。ちなみにTrueとすればONになります。
これらの処理をオプションボタン数の4回ループ処理を繰り返すことで、全て解除し初期状態に戻しています。
3.まとめ
オプションボタンのグループ化は上述以外ではユーザーフォームを作成する際に表示されるツールボックスにある「フレーム」を利用することで設定することも可能です。
今回の方法は手段として知っておくとユーザーフォームを作成する際に役に立つこともありますので、何か機会があればか活用などをご検討くださいませ。
以上、オプションボタンのグループ化や解除を行う方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

