- 締切済み
excelのVBAについてです。
ユーザーフォームの中に10個以上のオプションボタンがあります。どのボタンが選択されているかを判定するのに if optionbutton1.value=true then ... else ... if optionbutton2.value=true then ... else ... ... ... のように、すべてのボタンに対してif then ステートメント記述しています。 この部分をもう少し簡単にできないかなというのが今回の質問です。教えてください。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
オプションボタンをグループ化(オプショングループ)にしてある場合の #1の方の方法は簡易的には良いと思います。しかし、オプショングループがフォーム内に2つ以上配置されている場合は対応できない点と、コントロールの名前が固定される問題があります。 そこで引数にオプショングループ名を指定し、そのグループ内で選択された(Trueである)コントロール名を返す関数を作成してみました。 ちなみに、オプショングループは、各OptionButtonコントロールのGroupNameプロパティで設定します。今回の場合ですと、OptionButton1~10までを一括選択し、GroupNameを設定すると良いでしょう。 '関数:オプショングループ内で選択されたコントロール名を返す Private Function GetCtrlNameInGroup(strGroupName As String) Dim myCtrl As Control Dim strChecked As String For Each myCtrl In Me.Controls If TypeName(myCtrl) = "OptionButton" Then If myCtrl.GroupName = strGroupName _ And myCtrl.Value = True Then strChecked = myCtrl.Name Exit For End If End If Next myCtrl GetCtrlNameInGroup = strChecked End Function 使い方はこんな感じ。GroupNameプロパティがTESTであるオプショングループからTrueのコントロール名を取得しています。 Private Sub CommandButton1_Click() MsgBox "選択されたコントロール名" & GetCtrlNameInGroup("TEST") End Sub ACCESSならこんな面倒なことしなくて済むんですが、、
- Wendy02
- ベストアンサー率57% (3570/6232)
例: For i = 1 To 10 If Me.Controls("OptionButton" & i).Value = True Then MsgBox "OptionButton" & i & " がTrueです" End If Next