ユーザーフォーム入門
第14回.オプションボタン(OptionButton)の追加

Excelマクロのユーザーフォームの基礎、エクセルVBAの入門解説
最終更新日:2019-12-16

第14回.オプションボタン(OptionButton)の追加


ユーザーフォーム入門として基礎から解説します。
オプションボタンは、複数の項目からの単一選択になります。
ラジオボタン、トグルボタンなどとも呼ばれるものです。


前回のチェックボックスと混同されがちですが、
チェックボクスはON/OFF、オプションボタンは複数からの選択になります。
むしろ、コンボボックスやリストボックスの単一選択と同じ機能と言えます。
違いは、見た目の問題になります。

選択項目が変化しない、つまり今後も増減しない項目で、
かつ、選択数が少ない場合には、コンボやリストより見た目として分かりやすいコントロールと言えます。

オプションボタンの追加

ここでは、顧客が企業か個人かの区分を追加します。

VBA マクロ ユーザーフォーム

オブジェクト名は、opt企業opt個人
後は、Captionを指定すれば良いでしょう。
その他のプロパティでは、チェックボックスと同様に、
Alignment
これが、文字を左右どちらに表示するかの指定になります。

オプションボタンの状態設定

オプションボタンは、1つのみ選択可能なので、1つのボタンをONにすると、
自動的に、他のボタンはOFFになります。

Me.opt企業.Value = True ・・・ 企業がON、個人がOFFになります。
Me.opt個人.Value = True ・・・ 企業がOFF、個人がONになります。


適宜、UserForm_Initialize等で設定します。
全てのオプションボタンのValueをFalseに設定した場合、全てが未選択状態となります。


半押し(ON/OFFの中間)状態にすることもできます。


Me.opt企業.Value = vbNullString
Me.opt個人.Value = vbNullString

VBA マクロ ユーザーフォーム

この状態を判定するには、

If IsNull(Me.opt企業.Value) Then
If IsNull(Me.opt個人.Value) Then

ValueがNullになっているので、True/False判定の前に必ずNull判定をする必要があります。

チェック状態の判定

Valueプロパティで判定します。

Me.opt企業.Value = True ・・・ 企業がONで、個人がOFFの状態です。
Me.opt個人.Value = True ・・・ 企業がOFFで、個人がONの状態です。


オプションボタンの数は多くなるので、実際のコードではSelect Caseを使って、



Select Case True
  Case Me.opt企業.Value
    '企業がONです
  Case Me.opt個人.Value
    '個人がONです
  Case Else
    '何も選択されていません
End Select

このような書き方が解り易いと思います。
オプションボタンは複数が連動する以外は、単純なON/OFFだけになります。
一つのボタンがTrueであれば、他は必ずFalseになっています。

オプションボタンのグループ化

オプションボタンは、
フォームに直接配置した場合は、フォーム全体でグループ化され、
フレーム内に配置した場合は、そのフレーム内でグループ化されます。

VBA マクロ ユーザーフォーム

フレーム内に配置した場合は、自動的に配置したフレームごとにグループ化されます。
フレーム内に配置せずにグループ化する場合は、GroupNameプロパティを使用します。

Me.OptionButton3.GroupName = "group1"
Me.OptionButton4.GroupName = "group1"
Me.OptionButton5.GroupName = "group2"
Me.OptionButton6.GroupName = "group2

VBA マクロ ユーザーフォーム

以下は、指定されたオプションボタンと同じグループのオプションボタンを全てイミディエイトに出力しています。

Sub OptionGroup(ByVal argOpt As MSForms.OptionButton)
  Dim ctl As MSForms.Control
  For Each ctl In argOpt.Parent.Controls
    If TypeName(ctl) = "OptionButton" Then
      If argOpt.GroupName = ctl.GroupName Then
        Debug.Print ctl.Name
      End If
    End If
  Next
End Sub

If TypeName(ctl) = "OptionButton" Then
これでオプションボタンかどうかの判定をしています。
そして、.GroupNameで同一グループの判定をしています。



同じテーマ「ユーザーフォーム入門」の記事

第11回.コンボボックス(ComboBox)の追加
第12回.リストボックス(ListBox)の追加
第13回.チェックボックス(CheckBox)の追加
第14回.オプションボタン(OptionButton)の追加
第15回.ここまでの整理と全VBA
第16回.アクティブコントロールに色を付ける
第17回.Enterキーで次のコントロールに移動する
第18回.2段階のコンボボックス
第19回.数値専用のテキストボックス
第20回.テキストボックスの各種イベント
第21回.ユーザーフォームの各種イベント


新着記事NEW ・・・新着記事一覧を見る

ツイッターで出されたVBAのお題をやってみた|エクセル雑感(1月13日)
イベントプロシージャーの共通化(Enter,Exit)|ユーザーフォーム入門(1月13日)
Rangeオブジェクトの論理演算(差集合と排他的論理和)|VBA技術解説(1月10日)
イベントプロシージャーの共通化|ユーザーフォーム入門(1月7日)
コントロールの動的作成|ユーザーフォーム入門(1月6日)
Evaluateメソッド(文字列の数式を実行します)|VBA技術解説(1月5日)
エクスポート(PDF/XPS)|VBA入門(1月2日)
分析関数(OVER句,WINDOW句)|SQL入門(12月25日)
取得行数を限定するLIMIT句|SQL入門(12月21日)
外部ライブラリ(ActiveXオブジェクト)|VBA入門(12月21日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • オプションボタン(OptionButton)の追加

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
    掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ