ユーザーフォーム入門
第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 ・・・新着記事一覧を見る

VBA100本ノック 37本目:グラフの色設定|VBA練習問題(12月1日)
VBA100本ノック 36本目:列の並べ替え|VBA練習問題(12月1日)
VBA100本ノック 35本目:条件付き書式|VBA練習問題(11月29日)
VBA100本ノック 34本目:配列の左右回転|VBA練習問題(11月28日)
VBA100本ノック 33本目:マクロ記録の改修|VBA練習問題(11月26日)
VBA100本ノック 32本目:Excel終了とテキストファイル出力|VBA練習問題(11月25日)
VBA100本ノック 31本目:入力規則|VBA練習問題(11月24日)
将棋とプログラミングについて~そこには型がある~|エクセル雑感(11月22日)
VBA100本ノック 30本目:名札作成(段組み)|VBA練習問題(11月22日)
VBA100本ノック 29本目:画像の挿入|VBA練習問題(11月21日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.マクロって何?VBAって何?|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




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


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



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