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

COUNTIF関数の結果は?(ツイッターお題)|エクセル雑感(5月30日)
エクセル&VBA オンライン講座|エクセル セミナー(5月29日)
アルファベットの26進(ツイッターお題)|エクセル雑感(5月19日)
VBAが消えてしまった!マクロが壊れて動かない!|エクセル雑感(5月8日)
時間に関する関数の扱い方(ツイッター投稿)|エクセル雑感(5月6日)
文字列のセルだけ結合(ツイッターのお題)|エクセル雑感(5月5日)
表示形式.言語設定|エクセル入門(5月1日)
GoogleスプレッドシートをExcelにインポートする|VBAサンプル集(4月28日)
ツイッターのお題「CSV編集」|エクセル雑感(4月25日)
プログレスバーを自作する|ユーザーフォーム入門(4月18日)


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

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




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


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



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