【VBA】ユーザーフォームのオプションボタンで、どの項目が選択されたか判定する方法

目次

はじめに

VBAのユーザーフォームで、「複数の選択肢の中から、ユーザーに一つだけを選んでもらいたい」という場面は非常に多くあります。例えば、性別の選択(男性/女性)や、アンケートの評価(良い/普通/悪い)などです。このような択一式の選択には、「オプションボタン」コントロールが最適です。

同じグループ内のオプションボタンは、どれか一つを選択すると、他のボタンの選択が自動的に解除される(排他的選択)という特性を持っています。

この記事では、ユーザーフォーム上に配置した複数のオプションボタンの中から、ユーザーがどれを選択したのかをVBAで判定する、基本的で確実な方法を解説します。


選択されたオプションボタンを判定するVBAサンプルコード

このマクロは、ユーザーフォームに配置された「決定」ボタンがクリックされたときに、3つのオプションボタンの状態を調べ、選択されている項目のキャプション(表示テキスト)をメッセージボックスに表示します。

ユーザーフォームのコード

' 「決定」ボタン(SubmitButton)がクリックされたときの処理
Private Sub SubmitButton_Click()

    '== 変数を定義します ==
    Dim i As Long
    Dim selectedChoice As String
    
    ' デフォルト値を設定(何も選択されなかった場合)
    selectedChoice = "未選択"
    
    '== 1番から3番までのオプションボタンをループ処理 ==
    For i = 1 To 3
        ' .Valueプロパティで、選択状態(True)か非選択状態(False)かを判定
        If Me.Controls("ChoiceOption" & i).Value = True Then
            ' 選択されていたら、そのボタンのCaptionを取得してループを抜ける
            selectedChoice = Me.Controls("ChoiceOption" & i).Caption
            Exit For
        End If
    Next i
    
    '== 結果をメッセージボックスに表示 ==
    MsgBox "選択されたプラン: " & selectedChoice, vbInformation, "選択結果"

End Sub

実行前の準備

  1. ユーザーフォームを作成します。
  2. フォーム上に「オプションボタン」を3つと、「コマンドボタン」を1つ配置します。
  3. 3つのオプションボタンの (Name) プロパティを、上から順に ChoiceOption1, ChoiceOption2, ChoiceOption3 に変更します。Caption はそれぞれ「プランA」「プランB」「プランC」のように設定します。
  4. コマンドボタンの (Name)SubmitButton に、Caption決定 に変更します。
  5. フォームのコードモジュールに上記のコードを貼り付け、フォームを表示して使用します。

コードの解説

If Me.Controls("ChoiceOption" & i).Value = True Then

この一行が、どのオプションボタンが選択されているかを判定する核心部分です。

  • Me.Controls("ChoiceOption" & i): Forループのカウンタ変数 i を使って、ChoiceOption1, ChoiceOption2, ChoiceOption3 という名前のコントロールを順番に参照しています。
  • .Value: オプションボタンの Value プロパティは、そのボタンが選択されている状態であれば True を、選択されていなければ False を返します。
  • この If 文で、ValueTrue のボタンが見つかった瞬間に、中の処理が実行されます。

selectedChoice = Me.Controls("ChoiceOption" & i).Caption

選択状態のボタンが見つかったら、そのボタンの .Caption プロパティ(画面に表示されているテキスト、例: “プランA”)を取得し、結果を格納する文字列変数 selectedChoice に代入しています。

Exit For

オプションボタンは、グループ内で必ず一つしか選択されません。そのため、選択されているボタンが一つ見つかった時点で、それ以上ループを続ける必要はありません。Exit For を使ってループを即座に抜けることで、無駄な処理を省き、コードを効率化しています。


まとめ

今回は、ユーザーフォームのオプションボタンで、どの項目が選択されたかを判定する方法を解説しました。

  • オプションボタンの選択状態は .Value プロパティで確認できる(選択済み = True)。
  • 複数のオプションボタンは、Controls コレクションとループを組み合わせることで効率的に判定できる。
  • 一つ見つかったら Exit For でループを抜けるのが定石。

この基本を応用すれば、ユーザーの選択に応じて実行する処理を分岐させたり、シートに書き込む値を変えたりと、様々な対話的なツールを作成することができます。

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

この記事を書いた人

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

目次