Excel2000とExcel2002のVBAでオプションボタンをループで回す方法

このQ&Aのポイント
  • Excel2000とExcel2002のVBAを使用して、オプションボタンをループで回したい場合、エラーが発生することがあります。以下のコードを使用してループを実装しようとすると、エラーが発生します。
  • OptionButtonや.valueをダブルクォーテーションでくくるなどの対策を試みましたが、エラーは解消されませんでした。ループで複数のオブジェクトを回すことはできないのでしょうか?
  • オプションボタンの数が40個というのは使いにくいですが、ユーザインターフェースの改善は別の機会に検討してください。
回答を見る
  • ベストアンサー

OptionButton1~40真偽の分岐をループでまわす

オプションボタンをループで回したいのですがエラーになってしまいます。 環境はExcel2000とExcel2002のVBAです。 --------------------------------------- Dim i as integer Dim a as integer for i = 1 To 40 if OptionButton & i & .value Then a = i - 1 End if Next ---------------------------------------- といった感じにしたいのですが、上記の場合エラーになってしまいます。 Else ifでひとつひとつ書いていくのもコードが長くなって避けたいです… あとオプションボタンが40個というのはユーザインターフェースとして 使いにくいというのはここではおいといてください… OptionButtonや.valueを"でくくったりしてみましたが それもエラーになります。 OptionButtonみたいな複数のオブジェクトを ループでまわすのは不可能なのでしょうか? もし可能であれば何かうまい方法を教えて頂けないでしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

  OptionButtonをどこに配置しているかで違います。 ●シート上に配置している場合 If ActiveSheet.OLEObjects("OptionButton" & i).Object.Value Then ●ユーザーフォー上に配置している場合 If Me.Controls("OptionButton" & i).Value Then 以上です。  

matthew_mu
質問者

お礼

教えて頂いたコードでできました! ありがとうございました!

関連するQ&A

  • エクセル VBA OptionButtonからTextBox

    すいません! OptionButtonなら 下記の記述でエラー表示を 簡単にできるのですが これがOptionButtonではなく TextBoxならどのように変化したら 良いのでしょうか? すいません、教えて下さい! Private Sub 記録_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 6 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "選択されていません" Exit Sub End If If Me.Controls("Combobox" & Cnt).Value = "" Then MsgBox Me.Controls("OptionButton" & Cnt).Caption & " の内容が選択されていません" Exit Sub End If With 記入フォーム .TextBox5.Value = Me.Controls("OptionButton" & Cnt).Caption .TextBox6.Value = Me.Controls("Combobox" & Cnt).Value End With Unload Me End Sub

  • どなたか教えてください。

    Public myop As Integer 'オプション選択保持用 Private Sub CommandButton1_Click() Dim row As Integer Dim mykey As String '比較キー '選択したオプションボタンにより '比較キーと選択保持用変数に各値を代入 Select Case True Case OptionButton3: mykey = ("A2:A11"): myop = 1 Case OptionButton4: mykey = ("B2:B11"): myop = 2 Case OptionButton5: mykey = ("C2:C11"): myop = 3 Case OptionButton6: mykey = ("D2:D11"): myop = 4 Case Else: myop = 0 End Select If myop = 0 Then Exit Sub For row = 1 To 65535 If ActiveSheet.Cells(1, row).Value Like mykey Then ActiveSheet.Cells(1, row) = "#####" End If Next row End Sub で、For row = 1 To 65535でエラーがでます。 どうしてなのでしょうか・・・?

  • Excel VBA OptionButton

    Excel VBAのOptionButtonについてお伺いします。 現在、Excel2007にてユーザーフォームを作成しております。 シート上の文字によって、ユーザーフォーム上のオプションボタンの ON/OFFを切り替えたいのですがうまく動作しません。 具体的には・・・・ ユーザフォーム上のCommandButton1を押下すると、 sheet2のE22セルの文字がTRUEの場合、ユーザーフォーム上の OptionButton1がON・OptionButton2がOFF sheet2のE22セルの文字がFALSEの場合、ユーザーフォーム上の OptionButton1がOFF・OptionButton2がON 以下のように考えていたのですが、動作しません。 ------------------------------ Private Sub CommandButton1_Click() If sheet2.Range("E22").Value = "TRUE" Then OptionButton1.Value = True ElseIf sheet2.Range("E22").Value = "FALSE" Then OptionButton2.Value = True End If ------------------------------ お知恵お借りしたく存じます。 宜しくお願い致します。

  • Forループの制御について

    VB 2005,Framework2.0を使用しています。 For文を使ったループについてお尋ねしたいことがあります。 For i As Integer = 0 To 10     ’処理 Next i とあったとします。 そうするとループ変数iが0から10になるまで連続してループを行うのですが、これをある条件の時に現在のループ変数から一つ飛ばして次のループからまた処理を行いたい場合どのようにすれば良いのでしょうか? 例えば0~10回中に、現在5回目で特定の条件が一致したときその次の6回目のループは飛ばして7回目のループから再開したいです。 ちなみにこの様に書いても0から10回必ずループされてしまいました。 Dim TEST(10) As Integer TEST(5) = 1 For i As Integer = 0 To 10 If TEST(i) = 1 Then i = i + 1 End If Next i

  • エクセル マクロ オプションボタン

    エクセル上にユーザーフォーム1を作り OptionButton1~4作成 Captionには OptionButton1)あ OptionButton2)い OptionButton3)う OptionButton4)え と名前を付けてOptionButton1をクリックすると TextBox1に”あ”と表示するようにしたいです! お願いします! 教えて下さい。 {宣言は何?} Dim i As Integer Dim s1 As String For i = 1 To 3 Step 1 s1 = Me.Controls("OptionButton" & i).Caption If Me.Controls("optionbutton" & i) = True Then With UserForm1 .TextBox1.Value = s1 End With End If Next i End Sub 上記の記述では無理でした! 教えて下さい。

  • Excelの「OptionButton」について

    Excelで新しいシートを開き、VBE画面でユーザーフォームを挿入し、そのフォームにOptionButton1とOptionButton2を配置しました。OptionButton1,2のControlSourceをそれぞれA1、A2にしOptionButton1のValueをTrueにします。 この状態でフォームを表示し最初にOptionButton2をクリックすると両方のオプションボタンがOffになってしまいます。フォームを表示したまま2回目からのクリックではOn、Offがうまく切り替わります。ControlSourceをセットしなければ1回目のクリックでもうまく切り替わるみたいです。作り方がおかしいのでしょうか?

  • オプションボタンについて

    VBAはまだやり始めたばかりで、ちょっとわからないので、教えて 下さい。 TextBox1~19に金額を入力すると、 TextBox60に小計 TextBox61に消費税 TextBox62に合計 が入るように設定してあります。 TextBox61のよこに OptionButton1 切捨て OptionButton2 切り上げ OptionButton3 四捨五入 OptionButton4 税込み(「-」を入力) を設定し、オプションボタンを選択するごとに、TextBox61の 消費税設定を変えたいと思っています。 標準では下記のコードでOptionButton1が選択されるように してあります。 オプションボタンで切り替えるにはどのようにしたら よいでしょうか。。。 Private Sub 合計Sub(ByVal myTextBox As MSForms.TextBox) Const cnsTax As Double = 0.05 Dim i As Long Dim v(1 To 19) As Long Dim y(60 To 62) As Long ' With myTextBox .Value = Format$(.Value, "#,##0") End With '再計算 On Error Resume Next For i = 1 To 19 v(i) = CLng(Me.Controls("TextBox" & i).Value) Next With Application.WorksheetFunction y(60) = .Sum(v) If myTextBox Is Me.TextBox61 Then y(61) = CLng(myTextBox.Value) Else y(61) = .RoundDown(y(60) * cnsTax, 0) End If y(62) = .Sum(y(60), y(61)) End With On Error GoTo 0 For i = 60 To 62 Me.Controls("TextBox" & i).Value = Format$(y(i), "#,##0") Next End Sub

  • エクセルのVBAについて教えてください。

    以前に下記のような内容のプログラムを作成したいと投稿致しましたら dim row as Integer for row = 1 to 65535 if (selectSheet.Cells(1, row) = "") then selectSheet.Cells(1, row) = "#####" EndIf をアレンジしたいのです。 上記のプログラムが構築されているコマンドボタンと同じuserformにオプションボタンを5個、コンボボックスを一つ作りました。 オプションボタン1を選択するとコンボボックスにはあ行が。 オプションボタン2を選択するとコンボボックスにはか行が。 オプションボタン3を選択するとコンボボックスにはさ行が。 オプションボタン4を選択するとコンボボックスにはた行が。 オプションボタン5を選択するとコンボボックスにはな行が。 選択できるようにしたいのです。 次に選んだオプションボタンと同名前のシートに上記の#####が入力されるようにしたいのですが、どのようにすればいいのですか? このように教えて頂きました。 Public myop As Integer 'オプション選択保持用 Private Sub CommandButton1_Click() Dim row As Integer Dim mykey As String '比較キー '選択したオプションボタンにより '比較キーと選択保持用変数に各値を代入 Select Case True Case OptionButton1: mykey = "[あ-お]*": myop = 1 Case OptionButton2: mykey = "[か-こ]*": myop = 2 Case OptionButton3: mykey = "[さ-そ]*": myop = 3 Case OptionButton4: mykey = "[た-と]*": myop = 4 Case OptionButton5: mykey = "[な-ほ]*": myop = 5 Case Else: myop = 0 End Select If myop = 0 Then Exit Sub For row = 1 To 65535 If ActiveSheet.Cells(1, row).Value Like mykey Then ActiveSheet.Cells(1, row) = "#####" End If Next row End Sub これを流用して自分でいじりたいのですが、私が未熟ですので、コードの意味、役割がさっぱりわかりません。 わがままな質問ではございますが、どなたか上記のコードの意味を教えて頂けませんか? よろしくお願い致します。

  • Excel VBA オプションボタンについて

    こんばんは オプションボタンが5つあり、 登録ボタンが1つあるユーザーフォームを作りました。 このオプションにチェックを入れずに登録ボタンを押したときに 「必ず選択してください。」とメッセージを表示し、再度入力させるようにしたいのですが、どうしたらよいのでしょうか。 Excelのバージョンは2003です。 調べたところ (1)で動きそうだ。ということが判ったのですがチェックを入れ値がtrueになるとエラーが発生して止まってしまいます。(理由がわかりません) Private Sub commandbutton2_click() Dim opt As ControlFormat, flg As Boolean flg = False For Each opt In frame1.Controls If opt.Value = True Then '←ここの行でtrueだった場合のエラーが発生してしまう。 flg = True Selection.Value = opt.Caption End If Next Unload userform1 End Sub (2)この方法で何とか動いたのですが、初めの方に書いたとおり、オプションボタンが選択されずに登録ボタンが押された場合、チェックするように促すメッセージを表示する方法がわかりません。また、できればユーザーホームの×ボタンを押せなくする方法もしくは、閉じられた場合にマクロを抜けるようにするにはどうしたらよいのでしょうか。宜しくお願い致します。 Private Sub commandbutton1_click() Dim i As Integer For i = 1 To 5 If Me.Controls("optionbutton" & i).Value = True Then Selection.Value = Me.Controls("optionbutton" & i).Caption End If Next i Unload userform1 End Sub

  • VBA EXCEL optionbuttonの選択

    現在オプションボタンにて設定下記のようにしています。 オプションボタンをいくつか設置しており、どれか選択すると下記のコードへ飛んできます。 どれか選択すると、enabledをtrueにし、OKボタンをクリックできる。そしてどのオプション ボタンを選択したのか他のモジュールから確認する為tagにその痕跡を残すように設定しています。 Public Sub OptionButton1_Click() 'オプションボタン選択動作。OKボタンを有効へ Cmd_ok.Enabled = True OptionButton1.Tag = True End Sub Public Sub OptionButton2_Click() 'オプションボタン選択動作。OKボタンを有効へ Cmd_ok.Enabled = True OptionButton2.Tag = True End Sub Public Sub OptionButton3_Click() 'オプションボタン選択動作。OKボタンを有効へ Cmd_ok.Enabled = True OptionButton3.Tag = True End Sub ****************** そして下記のコードでどのオプションボタンが選択されたのか確認しています。 For i = 1 To 3 If UserForm1.Controls("OptionButton" & i).Tag = True Then xxx = i End If Next i ******************** 一番上にある『OptionButton1.Tag = True』と設定しているものを選択されたオプションボタン からみて相対的な表現に変更できないでしょうか? 意味としては『現在選択されているオプションボタンのtag = true』といった表現です。 現状でも目的は果たせますが、これからボタンが複数になった場合、オプションボタンのオブジェクト名を変更しなくなった時に手間がしないようにする事が目的です。 もしくはもっとスマートなコードがあれば歓迎です。 ご指導お願いします。

専門家に質問してみよう