• ベストアンサー

3つのオプションボタンの場所によって分岐させるselect文

3つのうち一つしか選べないオプションボタンのチェックした場所によってテキストボックスに数字を表示させる文を書きたいのですがどのようにselect case 文を書いていけばよいのでしょうか? ・3つともボタンのオブジェクト名(opt)は同じです。indexプロパティは1,2,3にしています。 select case index case 1 label.caption = 1 case 2 label.caption = 2 case 3 label.caption = 3 End select 上記ではうまくいきませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

質問のcaseによる分岐ですが、、、、 ※1.optのクリックイベントで処理を行っているのですか? ※2.それとも、別のボタンなどのタイミングで、処理を行おうとしているのですか? ※1ならそのままできるような気がするのですが、、、 もしそうなら、もう少し前後のソースの公開が必要です。 ※2なら、opt_clickイベントで opt(1).Tag=Index としておいて、必要なタイミングで label.caption = opt(1).Tag としてあげたら、すべてのオプションボタンをチェックする必要がなくなります。

DINO-PIE
質問者

お礼

if 文でできました。ありがとうございました。

その他の回答 (1)

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.2

どこでもOKな書き方だと select case true case opt(1).value label.caption = 1 case opt(2).value label.caption = 2 ・・・ のようになりますね。 #1さんが書かれておられるように、オプションボタンのClickイベントだとIndexが渡されてくるので、 質問コードそのままで動作するはずなんですが。 あとは Dim i As long For i=1 to 3'For i=opt.Lbound to opt.Ubound とすべきですが if opt(i).value then exit for next i Select case i case 1 ・・・ なんかでしょうか。 もっといえば、この場合Select~Caseで分岐する必要は全く無く Dim i As long For i=1 to 3'For i=opt.Lbound to opt.Ubound とすべきですが if opt(i).value then label.caption = cstr(i) exit for end if next i のようにしても同じ動作になります。

DINO-PIE
質問者

お礼

オプションボタンでは処理を行わずにできました。selectはいりませんでした。ありがとうございました。

関連するQ&A

  • オプションボタンの使い分けによる時間計算

    オプションボタンの使い分け(自動入力と手動入力)によって、 「●やりたい操作」を行うには以下のコードをどのように修正すれば、 良いでしょうか?ご存知の方ご教示願います。 使用機種はWindowsVistaでExcel2007です 私はVBAをはじめて2カ月程度の初心者です。 ●やりたい操作 A)「自動入力」を選択(赤色部分)→原則の操作 1.「作業開始ボタン」を押すと「開始時間」が現在の時間になる。 2.「作業開始ボタン」を押すと表記が「作業終了」になる。 3.「作業終了ボタン」を押すと「終了時間」が現在の時間表記になる。 4.3と同時に「作業時間」が「終了時間」-「開始時間」の時間計算を行って   表記される。 ※このとき「手動入力ラベル」や「テキストボックス」には、それぞれロックが かかり、入力不可状態にする B)「手動入力」を選択(青色部分)→例外の操作 1.左から1番目のテキストボックスに「hh:mm」形式で任意の時間を入力 2.左から2番目のテキストボックスに「hh:mm」形式で任意の時間を入力 3.左から3番目のテキストボックスに「hh:mm」形式で2-1の時間計算   を行う ※このとき「自動入力ラベル」、「作業開始ボタン」、「開始時間」、 「終了時間」にそれぞれロックがかかる。 ●コード Option Explicit ' True なら計測中を表す Dim inProcess As Boolean Private j_Kaishi As Date Private j_Syuryo As Date Private s_kaishi As Date Private s_Syuryo As Date Private Sub UserForm_Initialize() OptionButton1 = True OptionButton2 = False TextBox5.Locked = True TextBox6.Locked = True TextBox7.Locked = True Label22.Caption = "開始時間" Label23.Caption = "終了時間" Label23.Caption = "作業時間" 'オプションボタンが1「自動」にオンならば、CommandButton6_Clickを呼び出す If OptionButton1 = True Then Call CommandButton6_Click 'オプションボタン1が「自動」にオフならば、 OptionButton2_Clickを呼び出す Else Call OptionButton2_Click End If End Sub '開始時間を自動入力クリックするとラベル1が時間に変わる Private Sub CommandButton6_Click() Select Case inProcess Case False ' 計測を開始する inProcess = True j_Kaishi = Time Label22.Caption = Format(j_Kaishi, "hh:mm") Label23.Caption = "" Label24.Caption = "" CommandButton6.Caption = "作業終了" Case True ' 計測を終了してインターバルを表示 inProcess = False j_Syuryo = Time Label23.Caption = Format(j_Syuryo, "hh:mm") Label24.Caption = Format(j_Syuryo - j_Kaishi, "hh:mm") CommandButton6.Caption = "作業開始" End Select End Sub '開始時間を手動入力 Private Sub OptionButton2_Click() CommandButton6.Locked = True TextBox5.Locked = False TextBox6.Locked = False s_kaishi = Time TextBox5.Text = Format(s_kaishi, "hh:mm") s_Syuryo = Time TextBox6.Text = Format(s_Syuryo, "hh:mm") TextBox7.Text = Format(s_Syuryo - j_Kaishi, "hh:mm") End Sub

  • オプションボタン

    昨日も質問させていただいたものです。 オプションボタンの使い方について質問があります。 コマンドボタン1つ、テキストボックスを1つ、ラベルを一つ、 フレームを二つ用意し、それぞれのフレームに3つずつオプションボタンを配置します(●フレームA、B●オプションA1、A2、A3、オプションB1、B2、B3とする)。 オプションA1~3には1~3年生というキャプションを、 オプションB1~3には1~3組というキャプションを設定します。 テキストに名前を打ちこんでコマンドボタンを押すと、 ラベルに(テキストが太郎の場合)"太郎は3年1組です" と表示されるようなものを作ろうと考えています。 コマンドボタンを使用せずに、オプションボタンのみで作ると Privat Sub OptionA1_Click() If OptionB2.Valrue=True Then Label1.Caption="" と言うような感じで何個も書けば良いと思うのですが、 これにをコマンドボタンで実行させようとすると方法がわかりません。 アドバイスお願いします。

  • オプションボタン(配列)のチェック変更

    実質、NO.3213956の続きです。 聞いてばかりもだめなので小一時間探したのですが、 見つからないので、また質問させていただきます。 オプションボタンが2個以上(同じオブジェクト名で配列・欠番はないものとする)、テキストボックス(数字しか入力できない)が1個、コマンドボタンが2個あります。 テキストボックスに数字を入力し、コマンドボタンを押すと 入力した数字の配列番号のオプションボタンをTrueにします。 Private Sub Command1_Click() Dim ctl As Control 'コントロール Const conCTLNAME = "Option1" Dim intIndex As Integer For Each ctl In Me.Controls 'テキストに数字入力確認 If IsNumeric(txtIndex.Text) Then intIndex = CInt(txtIndex.Text) Else MsgBox "数字を入れてください" Exit Sub End If 'オプションボタン判定 If InStr(1, conCTLNAME, ctl.Name, vbTextCompare) Then ctl(intIndex).Value = True '※ End If Next ctl End Sub しかし、※でエラー「オブジェクト配列のインデックスを指定してください」が表示されます。 数字を選ぶところは、実際はDBに格納されているNumber型のフラグを持ってくる形になります。 コントロールを変数に格納している仕様で難しいですが、 アドバイスをお願いします。

  • IF文の分岐が正しく動きません

    Access VBAについて教えてください。いまオプショングループの中にテキストボックスがあります。オプショングループをoption1、テキストボックスをtextbox1とします。テキストボックスは空の状態で、ロックをかけているので入力はできません。 実行ボタンを押したときに、テキストボックスの中が空ならMsgboxをだしなさいという文をかきました。 If txtbox1.value = "" Then msgbox "nothing" end if また .value=NULL とも書き換えて実行しましたが、なぜかmsgboxを表示せずにend ifにいってしまいます。何が原因と考えられるでしょうか?

  • SELECTボックスの内容を動的に変えるには

    2つのSELECTボックスを用意し、1つ目のSELECTボックスの内容により 2つめのSELECTボックスの内容(項目数も含め)を変える方法を教えてください。 下記のようなHTMLを作ってみましたが、2つ目のSELECTボックスに項目がないため「オブジェクトがありません」のエラーが出ます。 ------------------------------------------------------- <html> <head> <SCRIPT language="vbscript"> <!-- option explicit sub selchng() dim strsel strsel = sel1.selectedIndex Select Case strsel Case "1" sel2.item(0).value = "1" sel2.item(0).text = "1" sel2.item(1).value = "2" sel2.item(1).text = "2" Case "2" sel2.item(0).value = "a" sel2.item(0).text = "a" sel2.item(1).value = "b" sel2.item(1).text = "b" sel2.item(2).value = "c" sel2.item(2).text = "c" Case else sel2.item(0).value = "A" sel2.item(0).text = "A" End Select end sub --> </SCRIPT> </head> <body> <select name="sel1" onchange=selchng()> <option value="1" selected>1</option> <option value="2" >2</option> <option value="3" >3</option> </select> <select name="sel2"> </select> </body> </html>

  • excel vba のオプションボタン 条件分岐

    ユーザーフォームに4つのオプションボタン(Opt1,Opt2,Opt3,Opt4)があり、一つも押さなかった場合に注意メッセージを出したいのですが、下記だとメッセージがでてくれません。 どのように修正すればいいか、ご教授頂ければ幸いです。 optボタンのプロパティ value は 4つとも false です。excel2000です。 If UserForm1.Opt1.Value = False And UserForm1.Opt2.Value = False And UserForm1.Opt3.Value = False And UserForm1.Opt4.Value = False Then MsgBox "いずれかを選んでください", vbExclamation, "区分を選んでください" End If

  • Accessオプションボタン vba case

    どなたか教えて下さい。 Access2002を使っています。 オプションボタンが9個ありオプション値は1~8の数字で商品分類コードが選べるようになっています。 問題は最後のオプション値「9」なのですが、 9を選んだときには総ての商品分類を選びたいのです。 これをCaseとSQLで、作ってみようともったのですが、 select optionCode case 1 1 case 2 2 ・ ・ case 9 true End select そして、sqlに代入させたいのです。 mysql="select * from 商品 " _ & "where 商品分類コード = " optionCode もんだいは、Case文で「true」と使えないことです。 like"*" もしくは -1 など色々して見ましたが エラーになってしまいます。 SQLで総ての条件を出すのにはTRUE以外になにかあるのでしょうか? Caseを使って組みたいのですが、その発想自体がおかしいのでしょうか? 今は、if文で、動かしています。 Caseで動かしたいのです。 どなたか、よろしくお願いします。 aki

  • VBAでオプションボタンの設定

    ワークシート上にOLEオブジェクトのオプションボタンを配置して、LinkedCellを設定し、同一行でGroupName を設定し、Caption をYesとNoにしようと思いました。 ところが、以下のコードですと、GroupName とCaption がエラーになってしまいます。 どのように直せばいいのでしょうか? エクセル2003です。 Sub test01() Dim n As Long, i As Long With ActiveSheet For n = 1 To 2 For i = 1 To 3 Set opt = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=.Cells(i, n).Left, Top:=.Cells(i, n).Top, Width:=50, Height:=18) opt.LinkedCell = .Cells(i, n).Offset(, 4).Address ' opt.GroupName = "OptG" & i ' opt.Caption = IIf(n = 1, "Yes", "No") Next i Next n End With End Sub

  • VBAでオプションボタン変更によって・・・

    エクセルVBAのユーザーフォーム内にあるコンボボックス3つを選択することによりデータ入力を行っています。 この度選択肢を増やすことになり、オプションボタンを2つ追加しようと思っています。 オプションボタンはどちらかを決定することで、コンボボックスの選択内容を変更する予定です。 コンボボックスは大中小分類としており、シート2から抽出したものをシート1に落としている現状をオプションボタン新設により、ボタン1は従来通りシート2から、ボタン2選択時はシート3にあるリストからコンボボックスへ繁栄させようとしたいのですが、方法が分かりません。 どなたか、教えていただけると助かります。 よろしくお願いします。 現在のコードを下記に記します。 Private Sub UserForm_Activate() With UserForm3 .OptionButton1 = True *この段階でボタン2を選択時は、シート3にあるリストよりコンボボックスの内容を抽出したい。 以下中小分類も同様としたい。 .ComboBox1.RowSource = "シート2!A3:A15" .ComboBox1.SetFocus End With End Sub Private Sub ComboBox1_Change() Dim myLlist As String myLlist = ComboBox1 With UserForm3 .ComboBox2.Text = "" .ComboBox3.Text = "" Select Case myLlist Case "大1" .ComboBox2.RowSource = "シート2!B21:B26" Case "大2" .ComboBox2.RowSource = "シート2!B27:B28" End Select End With End Sub Private Sub ComboBox2_Change() Dim myMlist As String myMlist = ComboBox2 With UserForm3 .ComboBox3.Text = "" Select Case myMlist Case "中1" .ComboBox3.RowSource = "シート2!C101:C111" Case "中2" .ComboBox3.RowSource = "シート2!C121:C124" End Select End With End Sub Private Sub OKボタン_Click() With UserForm3 ActiveSheet.Unprotect 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm3.ComboBox1.Value Cells(行, 列 + 1) = UserForm3.ComboBox2.Value Cells(行, 列 + 2) = UserForm3.ComboBox3.Value ActiveSheet.Protect End With End Sub

  • VBAでオプションボタンを透過

    ワークシート上にOLEオブジェクトのオプションボタンを設置するため、以下のようなマクロを書きました。 意図したように作動するのですが、一箇所だけ不具合があります。 .Object.BackStyle = fmBackStyleTransparent と、透過に設定してるのですが透過してくれません。(エラーにもなりません。) どこがおかしいのでしょうか? Sub test02() Dim n As Long, i As Long Dim myRng As Range With ActiveSheet For n = 3 To 5 For i = 3 To 10 Set myRng = .Cells(i, n) Set opt = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=myRng.Left + 2, Top:=myRng.Top + 2, Width:=myRng.Width * 0.8, Height:=myRng.Height * 0.9) opt.LinkedCell = myRng.Offset(, 4).Address opt.Object.Value = False opt.Object.GroupName = "OptG" & i opt.Object.Caption = Choose(n - 2, "Yes", "No", "N/A") opt.Object.BackStyle = fmBackStyleTransparent Next i Next n End With End Sub

専門家に質問してみよう