【VBA】シート上のオプションボタンをグループボックスで管理し、選択項目を判定する方法

目次

はじめに

Excelのシート上で、「問1. プランを選択」「問2. 支払い方法を選択」のように、複数の独立した設問にオプションボタンで回答させたい場合、そのまま配置すると全てのボタンが一つのグループになってしまいます。

この問題を解決するのが、「フォームコントロール」の「グループボックス」です。オプションボタンをグループボックスの内側に配置することで、ボックスごとに独立したグループを作成でき、それぞれのグループ内で一つずつ選択が可能になります。

この記事では、グループボックスを使ってオプションボタンを管理し、各グループでどの項目が選択されたのかをVBAで判定する方法を解説します。


グループごとの選択項目を判定するVBAサンプルコード

このマクロは、2つのグループボックス(PlanGroupBox, PaymentGroupBox)にそれぞれ配置されたオプションボタンの中から、選択された項目の情報を取得します。

完成コード

' 各グループボックスで選択されているオプションボタンの項目を取得する
Sub GetGroupedOptionValues()

    '== 変数を定義します ==
    Dim grpBox As GroupBox
    Dim optButton As OptionButton
    Dim selectedPlan As String, selectedPayment As String
    
    ' デフォルト値を「未選択」に設定
    selectedPlan = "未選択"
    selectedPayment = "未選択"
    
    '== 1. プラン選択グループ(PlanGroupBox)の選択肢をチェック ==
    Set grpBox = ActiveSheet.GroupBoxes("PlanGroupBox")
    ' GroupBox内の全オプションボタンをループ
    For Each optButton In grpBox.OptionButtons
        If optButton.Value = xlOn Then
            selectedPlan = optButton.Caption
            Exit For
        End If
    Next optButton
    
    '== 2. 支払い方法グループ(PaymentGroupBox)の選択肢をチェック ==
    Set grpBox = ActiveSheet.GroupBoxes("PaymentGroupBox")
    ' GroupBox内の全オプションボタンをループ
    For Each optButton In grpBox.OptionButtons
        If optButton.Value = xlOn Then
            selectedPayment = optButton.Caption
            Exit For
        End If
    Next optButton
    
    '== 結果をメッセージボックスに表示 ==
    MsgBox "プラン: " & selectedPlan & vbCrLf & _
           "支払い方法: " & selectedPayment, vbInformation, "選択内容の確認"

End Sub

実行前の準備

  1. シート上に「グループボックス」を2つ配置します。それぞれの (名前) をプロパティ(または名前ボックス)で PlanGroupBox, PaymentGroupBox に変更します。
  2. グループボックスの中に「オプションボタン」をそれぞれ複数配置します。(例: PlanGroupBox の中に「プランA」「プランB」、PaymentGroupBox の中に「カード」「振込」)
  3. 上記のマクロを実行すると、各グループで選択した項目がメッセージボックスに表示されます。

コードの解説

グループボックスによるグループ化

オプションボタンをフォームに直接配置するのではなく、グループボックスコントロールの内側に配置することで、そのボックス内のオプションボタンが一つの独立したグループとして機能します。

Set grpBox = ActiveSheet.GroupBoxes("PlanGroupBox")

ActiveSheet.GroupBoxes コレクションを使って、名前で特定のグループボックスオブジェクトを取得しています。

For Each optButton In grpBox.OptionButtons

この一行が、特定のグループ内の選択肢を判定するための核心部分です。

  • grpBox には、特定のグループボックスオブジェクトが格納されています。
  • .OptionButtons: そのグループボックスの内部に含まれる全てのオプションボタンのコレクションを返します。
  • この For Each ループは、PlanGroupBox の中に配置されたオプションボタンだけを一つずつ順番にチェックしていきます。

If optButton.Value = xlOn Then ...

ループの中で、各オプションボタンの .Value プロパティを調べ、選択状態(xlOn)のボタンを見つけます。見つかったら、そのボタンの .Caption(表示テキスト)を変数に格納し、Exit For でループを抜けて処理を効率化しています。


まとめ

今回は、グループボックスコントロールを使ってシート上のオプションボタンをグループ化し、それぞれのグループの選択結果を取得する方法を解説しました。

  • 複数の択一式設問を作りたい場合は、グループボックスでオプションボタンをグループ化する。
  • 各グループの選択結果は、GroupBoxオブジェクト.OptionButtons コレクションをループ処理することで判定できる。

このテクニックを使えば、シート上でアンケートや設定項目などを、構造的に分かりやすく作成することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次