PR

【VBA】オプションボタンのグループ化や解除を行う

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、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

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