• 締切済み

excelのVBAについてです。

ユーザーフォームの中に10個以上のオプションボタンがあります。どのボタンが選択されているかを判定するのに if optionbutton1.value=true then ... else ... if optionbutton2.value=true then ... else ... ... ... のように、すべてのボタンに対してif then ステートメント記述しています。 この部分をもう少し簡単にできないかなというのが今回の質問です。教えてください。よろしくお願いします。

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

オプションボタンをグループ化(オプショングループ)にしてある場合の #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)
回答No.1

例: For i = 1 To 10  If Me.Controls("OptionButton" & i).Value = True Then    MsgBox "OptionButton" & i & " がTrueです"  End If Next

関連するQ&A