【ExcelVBA・マクロ】ユーザーフォームのオプションボタン(ラジオボタン)の使い方|選択された項目を判定する方法【コピペOK】

ExcelVBA

オプションボタン(ラジオボタン)とは

ユーザーフォームで「複数の選択肢から1つだけ選ばせたい」という場面では、オプションボタン(一般的には「ラジオボタン」とも呼ばれます)を使います。チェックボックスが複数選択できるのに対し、オプションボタンは同じグループ内では1つしか選択できないという特徴があります。

この記事では、オプションボタンの基本的な使い方から、選択された項目の判定方法、複数グループを1つのフォームに配置する方法までを、実際に動作するサンプルコードとともに解説します。

スポンサーリンク
スポンサーリンク

オプションボタンの基本プロパティ

オプションボタンはOptionButtonコントロールとしてツールボックスから配置します。選択されているかどうかはValueプロパティ(True/False)で判定します。

以下は、フォーム上に「A」「B」「C」の3つのオプションボタン(OptionButton1OptionButton3)を配置した例です。

Private Sub CommandButton1_Click()

    Dim selectedText As String

    If OptionButton1.Value = True Then
        selectedText = "Aが選択されました"
    ElseIf OptionButton2.Value = True Then
        selectedText = "Bが選択されました"
    ElseIf OptionButton3.Value = True Then
        selectedText = "Cが選択されました"
    Else
        selectedText = "何も選択されていません"
    End If

    MsgBox selectedText

End Sub

同じフォーム上にある複数のオプションボタンは、初期状態では自動的に1つのグループとして扱われます。そのため、OptionButton1を選択するとOptionButton2OptionButton3は自動的に選択解除されます。

初期値をあらかじめ選択しておく

フォームを表示した時点で、いずれかのオプションボタンをデフォルトで選択させておきたい場合は、UserForm_InitializeイベントでValueTrueに設定します。

Private Sub UserForm_Initialize()

    OptionButton1.Value = True

End Sub

デフォルト選択を用意しておくことで、ユーザーが何も選ばずに次の操作へ進んでしまうミスを防げます。

Frameコントロールで選択肢のグループを分ける

「性別」と「支払方法」のように、1つのフォームに複数の選択グループを配置したい場合は、Frameコントロールで囲みます。同じフォーム上に置くだけだと、フレームで区切らない限りすべてのオプションボタンが1つのグループとして扱われてしまうため注意が必要です。

Private Sub CommandButton1_Click()

    Dim genderText As String
    Dim paymentText As String

    ' Frame1内:OptionButton1・OptionButton2
    If OptionButton1.Value = True Then
        genderText = "男性"
    ElseIf OptionButton2.Value = True Then
        genderText = "女性"
    Else
        genderText = "未選択"
    End If

    ' Frame2内:OptionButton3・OptionButton4
    If OptionButton3.Value = True Then
        paymentText = "現金"
    ElseIf OptionButton4.Value = True Then
        paymentText = "クレジットカード"
    Else
        paymentText = "未選択"
    End If

    MsgBox "性別: " & genderText & vbCrLf & "支払方法: " & paymentText

End Sub

Frame1OptionButton1OptionButton2を、Frame2OptionButton3OptionButton4を配置しておくことで、性別グループと支払方法グループがそれぞれ独立して1つだけ選択できるようになります。

Frame内のコントロールをループで判定する

オプションボタンの数が多い場合は、If文を並べる代わりにFrame.Controlsをループして選択されているものを探すとコードがすっきりします。

Function GetSelectedOptionCaption(targetFrame As MSForms.Frame) As String

    Dim ctrl As MSForms.Control

    For Each ctrl In targetFrame.Controls
        If TypeName(ctrl) = "OptionButton" Then
            If ctrl.Value = True Then
                GetSelectedOptionCaption = ctrl.Caption
                Exit Function
            End If
        End If
    Next ctrl

    GetSelectedOptionCaption = ""

End Function

Private Sub CommandButton1_Click()

    Dim result As String
    result = GetSelectedOptionCaption(Frame1)

    If result = "" Then
        MsgBox "選択されていません"
    Else
        MsgBox result & "が選択されています"
    End If

End Sub

TypeName(ctrl) = "OptionButton"でコントロールの種類を判定してからValueを確認することで、フレーム内に他の種類のコントロールが混在していても安全に処理できます。

オプションボタンとチェックボックスの違い

オプションボタンとよく似たコントロールにCheckBox(チェックボックス)があります。使い分けの基準は以下の通りです。

  • オプションボタン:同じグループ内から1つだけ選ぶ場合に使う(性別、支払方法など「どれか1つ」)
  • チェックボックス:複数の項目を独立してON/OFFできる場合に使う(利用規約への同意、複数条件の絞り込みなど)

「排他的な選択かどうか」がオプションボタンとチェックボックスを使い分ける基準になります。

注意点

  • フレームで区切らないと意図せず同じグループになる:フォーム上に複数の選択グループを作りたい場合は、必ずFrameコントロールで領域を分けましょう。
  • 初期値を設定しないとすべて未選択になるUserForm_Initializeで初期選択をしておかないと、ユーザーが何も選ばないまま処理が進んでしまう可能性があります。
  • コントロール名は分かりやすく変更しておくOptionButton1のままだと後から見て何を表すか分かりにくいため、optGenderMaleのような名前に変更しておくとコードの可読性が上がります。

まとめ

ユーザーフォームでオプションボタン(ラジオボタン)を扱う方法を解説しました。

  • 選択判定はOptionButton.Value = Trueで確認する
  • 同じフォーム上のオプションボタンは自動的に1グループになる
  • 複数グループに分けたい場合はFrameコントロールで領域を区切る
  • 選択肢が多い場合はFrame.Controlsをループして判定するとコードがシンプルになる
  • 「1つだけ選ぶ」ならオプションボタン、「複数選べる」ならチェックボックスを使う

排他的な選択肢を扱うフォームを作るときは、オプションボタンとFrameコントロールの組み合わせを覚えておくと、直感的で分かりやすい入力画面を作れます。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました