• ベストアンサー

チェックボックスの判定

VBAでチェックボックスが10個あったとして、チェックが付いているか確認したいのですが、 For i=0 to 9 if CheckBox & i =True then 処理 End if Next i と記述すると CheckBoxのところで「変数が定義されていません」というエラーメッセージが出ます。 このような判定はどうすれば良いでしょうか?

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

>VBAでチェックボックスが10個 コントロールの名前を変数として用いるのであれば、Controlsを使います。 標準でしたら添え字は1から始まるのでiは初期値1ではないでしょうか。 0~9に変更されているのであればご提示の「i = 0 to 9」で置き換えてください。 For i = 1 to 10   If Controls("CheckBox" & i) = True Then     処理   End if Next i http://www.moug.net/tech/exvba/0140013.html

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1です。 文章がおかしいですね。 >>標準でしたら添え字は1から始まるのでiは初期値1ではないでしょうか。 標準でしたら、コントロールに付く添え字は1から始まる連番となります。 コントロールのオブジェクト名は「CheckBox1~10」ではないでしょうか? 訂正いたします。

関連するQ&A

  • チェックボックスの使い方

    VBスクリプトでよくわからないところがあるので教えてください。たくさんのチェックボックスがあるので、For i To ~Next の構文を使って効率よくチェックされたものだけSQLの構文に取り入れて検索しようとしたのですがうまくゆきません。どのようにしたらよいでしょうか。 今試してみたのは、検索条件の設定画面で、 <input type=checkbox name=tatemono(0) value=自社使用>自社使用 <input type=checkbox name=tatemono(1) value=事業用>事業用 <input type=checkbox name=tatemono(2) value=電算センター >電算センター というようなチェックボックスを 検索処理用ページで SQL="SELECT * FROM [データ] " 'チェックボックスのチェック数が0でなければWHERE文をいれるflagをTrueにしておく If Request.Form("tatemono").Count>0 Then SQL=SQL & "WHERE " flag=True End If 'チェックボックスを最初から調べてチェックされていたらその項目がyesになっているという条件をSQL文に追加する For i=1 To Request.Form("tetemono").Count If Request.Form("tatemono")(i)<>"" Then fldname=Request.Form("tetemono")(i) If flag=True Then SQL = SQL & "AND" Else SQL = SQL & "WHERE" End If SQL= SQL & fldname & "=Yes" End If Next とやってみたのですが、ぜんぜん駄目みたいです。 根本的にどこか間違ってますよね・・・。 直すところを教えてください。 お願いします。

  • Excel VB のチェックボックスの処理について

    Excel VB のチェックボックスの処理について すみません。チェックボックスのチェックの状態を条件に処理をしたいです。 うまくいきません。 Dim strcheckBox As String For i = 0 To 100 strcheckBox = "CheckBox1_" & i   celleSe = "A" & i If Worksheets("test1").Controls(strcheckBox).Value = True Then Worksheets("test2").Range(celleSe).Value = "真" End If Next

  • エクセル VBA チェックボックスについて

    よろしくお願い致します。 OS:XP エクセル2003 VBAのことは、まったくの初心者です。 質問なのですが、下記のようなチェックボックス7にチェックが入れば、チェックボックス8~11に自由にチェックが入れれるようになり、逆にチャックボックス7にチェックが入ってない場合は、チェックボックス8~11のチェックはクリアされ、チェックできないものを作りました。 ここから、チェックボックス7にチェック入れたあとは、必ずチェックボックス9~11のどれかにチェックが入っている状態(ラジオボタンのような)で、チェックボックス7にチェックが入ってなかったら、8~11のチェックがクリアで尚且つ、チェックができなくなるようにするにはどうすればよいでしょうか? よろしくお願い致します。 Private Sub CheckBox7_Click() If CheckBox7.Value = True Then CheckBox8.Enabled = True CheckBox9.Enabled = True CheckBox10.Enabled = True CheckBox11.Enabled = True Else CheckBox8.Value = False CheckBox9.Value = False CheckBox10.Value = False CheckBox11.Value = False CheckBox8.Enabled = False CheckBox9.Enabled = False CheckBox10.Enabled = False CheckBox11.Enabled = False End If End Sub

  • VBScript+IEのチェックボックス判定

    VBScript(wsh)に関する質問です. InternetExplorerのオブジェクトを作成し,ie.Document.Writeで下記のようにチェックボックスを複数配置しました. <INPUT type="checkbox" id="id0">あああ <INPUT type="checkbox" id="id1">いいい 各チェックボックスがチェックされているか判定したいのですが, for文を用いた場合どのようにすればよいのでしょうか? If ie.Document.all.id0.checked Then … If ie.Document.all.id1.checked Then … のように逐次的に記述しては可変数の場合は対応できません. inputタグのidをすべて"id"として <INPUT type="checkbox" id="id">あああ <INPUT type="checkbox" id="id">いいい For i=0 To n If ie.Document.all.id(i).checked Then … で可能なようですが,ラベルをクリックしたときもチェックされるように <INPUT type="checkbox" id="id0"><label for="id0">あああ</label> とする必要があり,同一のidをinputタグに使用できない状況です. よろしくお願いします.

  • エクセル チェックボックスの解除について(VBA)

    YES/NOを入力させる為の下記のVBAにおいて、チェックボックス1をチェックすると、アの部分でチェックボックス2の解除を行う関係で?、シート上でチェックボックス2を操作していないのにもかかわらず、勝手にCheckBox2_Click()に入り、命令文イを実行してしまいます。 ただ単にSub CheckBox1_Click()のルーチンの最後までの処理で終わりたいのですが、どうしたらよいのでしょうか。 Private Sub CheckBox1_Click() If CheckBox1 = True Then Sheets("sheet1").Range("A1") = 1 Sheets("sheet1").Range("A2") = 0 CheckBox2 = False・・・ア Else Sheets("sheet1").Range("A1") = "" End If End Sub Private Sub CheckBox2_Click() If CheckBox2 = True Then Sheets("sheet1").Range("A1") = 0 Sheets("sheet1").Range("A2") = 1 CheckBox1 = False Else Sheets("sheet1").Range("A2") = ""・・・イ End If End Sub

  • EXCELのシート上に埋め込んだチェックボックスの一括処理方法について

    EXCEL VBAのコード記載方法について教えていただきたいことがあります。 Sheets("Test")上にコントロールツールボックスのチェックボックスを 100個とコマンドボタンを1個配置する。 コマンドボタンをクリックすると、CheckBox1~100を全てTrueにする。 これを、 Private Sub CommandButton1_Click() Sheets("Test").CheckBox1 = True Sheets("Test").CheckBox2 = True ・ ・ ・ End Sub と100回書くのではなく、配列化して記載することは可能なのでしょうか。 ユーザーフォームのチェックボックスであれば Dim i As Integer For i = 1 To 100 UserForm1.Controls("CheckBox" & i) = True Next i で出来ると思うのですが、シート上に埋め込むチェックボックスですと、どうにも上手く動いてくれません。 丁寧に全部書いていけばいいのですが、行が沢山増えてしまい見にくいのと、数字の書き間違いが出たりして作業が煩瑣なので、 可能であればまとめて処理してしまいたいと考えています。 どうぞよろしくお願いいたします。

  • VB2008EEのチェックボックスにて、

    VB2008EEのチェックボックスにて、 9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、 一旦チェックをオンにすると値が入ったままになって、オフにしても表示されてしまうため チェックがオフのものはボタン1クリックで空にしています。 1~9まであるのですが、1~4までは機能しているのですが、5~9が機能しません。 1~4にチェックが入っていると下記は実行されません。 5~9にチェックが入っていても下記が実行されてしまいます。      (実際は各番号)         ↓ If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "" End If なぜ4までと5からで動作が変わるのでしょうか? -------------------------------------------------------------- Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp1 = "1" End Sub '実際は2~8も記述あり Private Sub CheckBox9_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp9 = "9" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal eAsSystem.EventArgs) Handles Button1.Click If CheckBox1.CheckState = CheckState.Unchecked Then layp1 = "" End If '実際は2~8も記述あり If CheckBox9.CheckState = CheckState.Unchecked Then layp9 = "" End If If (layp1 = "1") Then TextBox1.Text = "aaaaa" End If If (layp2 = "2") Then TextBox2.Text = "bbbbb" End If If (layp3 = "3") Then TextBox3.Text = "ccccc" End If If (layp4 = "4") Then TextBox4.Text = "ddddd" End If If (layp5 = "5") Then TextBox5.Text = "eeeee" End If If (layp6 = "6") Then TextBox6.Text = "fffff" End If If (layp7 = "7") Then TextBox7.Text = "ggggg" End If If (layp8 = "8") Then TextBox8.Text = "hhhhh" End If If (laypca = "9") Then TextBox9.Text = "iiiii" End If End Sub

  • どれか1つでもチェックされていたら無効にする

    VB2010 7 Pro SP1 8つのチェックボックスと4つのラジオボタンがあり、チェックボックスにどれか1つでも チェックが入っていたらラジオボタンを無効にし、チェックが全部外れたら ラジオボタンを有効にしたいです。 下記のようなifで出来るかと思ったのですが、フォーム、ラジオボタン、チェックボックス どれに記述しても動きません。 どこに記述すればいいでしょうか? If CheckBox1.Checked Or CheckBox2.Checked Or CheckBox3.Checked Or CheckBox4.Checked Or CheckBox5.Checked Or CheckBox6.Checked Or CheckBox7.Checked Or CheckBox8.Checked Then RadioButton4.Enabled = False RadioButton6.Enabled = False RadioButton7.Enabled = False RadioButton8.Enabled = False Else RadioButton4.Enabled = True RadioButton6.Enabled = True RadioButton7.Enabled = True RadioButton8.Enabled = True End If

  • チェックボックスのチェックによるマクロ処理の変更

    ユーザーフォームにチェックボックスとコマンドボタンを設置して、チェックボックスのチェックに応じて、処理を変えるにはどうしたらいいでしょうか。 具体的には、ユーザーフォームに例えば、 (1)チェックボックス  -りんご (=checkbox1)  -かき  -みかん  -もも (2)コマンドボタン  -春  -夏  -秋  -冬 のボタンがあるとします。 仮に、春のボタンには、 「Call 春」とプロシージャを読むようにしています。 春のプロシージャには、 例えば、 Sub 春()  If checkbox1=true then   range("A1").value="肥料"  End if End sub のように書いています。 チェックボックスのチェックの有無・結果に応じて、処理を変えたいのですが、これでは、checkbox1box1のチェックの結果がsubプロシージャに渡せないので、どのようにしたらいいのでしょうか。 よろしくお願い致します。

  • ワークシート上のチェックボックスのチェックをカウント

    こんにちは EXCELのVBAに関する質問なのですが ワークシート上に配置したチェックボックス(コントロールツールボックス) で各シートのCheckbox1にチェックが入っている数を数えたいのですが 下記のように書いたところエラーが出ました。 何かよい改善案ご存知の方いらっしゃいませんか? よろしくお願いいたします。 Sub test() Dim myst As Worksheet Dim yes As Integer, myct As Integer myct = ThisWorkbook.Sheets.Count Worksheets.Add after:=Sheets(myct) Sheets(myct + 1).Name = "syuukei" For Each myst In Worksheets On Error GoTo elabel If ThisWorkbook.myst.CheckBox1.Value = True Then yes = yes + 1 End If elabel: Next with worksheets("syuukei") .range("a2")="YESの合計" .range("b2")=yes end with End Sub

専門家に質問してみよう