教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

ExcelVBAでフォーム内のフレームで選択されたオプションボタンを取得する方法

構文

構文は以下の通りです。

Dim 選択されたオプション As String
Dim コントロール As Control
For Each コントロール In フレーム.Controls
    If TypeName(コントロール) = "OptionButton" Then
        If コントロール.Value = True Then
            選択されたオプション = コントロール.Name
            Exit For
        End If
    End If
Next

解説

For Each コントロール In フレーム.Controlsは、フレーム内のすべてのコントロールを1つずつ確認するためのループです。TypeName(コントロール)は、コントロールの種類を確認し、オプションボタンかどうかを判断します。コントロール.Valueは、オプションボタンが選択されているかどうかを判定します。Exit Forは、選択されたオプションボタンが見つかったら、ループを終了します。

プログラミング例

具体的なプログラミング例を紹介します。

Dim 選択されたオプション As String
Dim コントロール As Control
' フレーム内のすべてのコントロールをチェック
For Each コントロール In フレーム1.Controls
    ' コントロールがオプションボタンかどうかを確認
    If TypeName(コントロール) = "OptionButton" Then
        ' オプションボタンが選択されているか確認
        If コントロール.Value = True Then
            ' 選択されたオプションボタン名を取得
            選択されたオプション = コントロール.Name
            Exit For ' 選択されたオプションが見つかったらループ終了
        End If
    End If
Next
' 選択されたオプションボタン名をメッセージボックスで表示
MsgBox "選択されたオプション: " & 選択されたオプション

上記のプログラムでは、For Each コントロール In フレーム1.Controlsでフレーム内の全てのコントロールをループで確認し、オプションボタン以外のコントロールも含まれている場合があるため、TypeNameでオプションボタンかどうかを確認します。TypeName(コントロール) = "OptionButton"が、現在のコントロールがオプションボタンかどうかを判断する条件です。コントロール.Value = Trueは、オプションボタンが選択されている場合に、そのコントロールの名前を選択されたオプションに代入し、ループを終了します。

まとめ

フレーム内のオプションボタンをFor Eachループを使って簡単に確認し、選択されたオプションボタンを特定する方法を示しました。TypeNameを使ってコントロールの種類を確認することで、オプションボタン以外のコントロールを除外できます。ループを使うことで、オプションボタンが複数あっても1つの処理で対応できます。