• ベストアンサー

ChexBox1等の「1」を変数にできますか教えて下さい

こんにちは VBA初心者で目下勉強中のものです さて、今作っているプログラム中で、ユーザーフォームのチェックボックス にチェックが入っているものをカウントするのに、FOR~NEXTで たとえばCheckBox1~ChexBox20まで回したいのですが、CheckBoxの後についている数字「1」等を変数「i」にすることはできるのでしょうか? どなたかご指導いただけないでしょうか 気持ちとしては、以下のようにしてみたいのですがエラーがでました For i = 1 to 20 CheckBox(i).Value = False Then Exit For .......... Next i とんちんかんな質問かもしれませんが、よろしくおねがいします

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

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

チェックボックスのオブジェクト名がCheckBox1~CheckBox20だと仮定します。次のように式を書けば実行できます。 for i = 1 to 20 if フォーム名.controls("CheckBox" & i).value = false then exit sub else ・・・・・・   end if next i このとき、フォームモジュールのイベントプロシージャーに記述するのであれば、if Me.controls("CheckBox" & i).value = true then と書くこともできます。 もし、オブジェクト名がCheckBox1~CheckBox20でなければ、オブジェクト名は必ず○○1・○○2・・・・という風になっていますので ("CheckBox" & i)を("○○" & i)と書き換えてください。 実行して、エラーが出てきたときは、エラーメッセージを教えていただければ、対処の方法をアドバイスできると思います。

tomosato
質問者

お礼

早速のご指導ありがとうございました ご指摘いただいたとおりに書き直したところ、見事に解決しました この1週間ほど、この問題で書店などにあるいろいろな解説書を読みあさっても解決できなかった事が夢のようです。 本当にありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

コントロール配列を使えます。 1つチェックボックスをForm1に貼りつけ。 デザインモードの状態で、編集-コピー-編集をクリック。 「同じ・・・コントロール配列にしますか」に「はい」を クリック。ドラッグして、複写されて重なっているチェックボックスが見えるように、分離してずらす。後は貼りつけを繰り返す。 Private Sub Form_Click() MsgBox "sss" For i = 0 To 3 MsgBox Form1.Check1(i).Value Next i End Sub

tomosato
質問者

お礼

早速のご指導ありがとうございます この1週間試行錯誤してできなかったことが、解決できてほんとうにありがたく思っています。私のような初心者の質問にもかかわらず、丁寧にご説明いただき、心より感謝もうしあげます ありがとうございました

noname#6248
noname#6248
回答No.1

CheckBox(i).Value = False Then Exit For を If CheckBox(i).Value = False Then Exit For か If CheckBox[i].Value = False Then Exit For にすると言うのではダメですか? あるいは Forの前に Dim CheckBox(20) と書いて見るとか…全然自信無いですけどね…

tomosato
質問者

お礼

早速アドバイスいただき、ありがとうございました 結果的にはうまくいきませんでしたが、初心者にとっては このように、アドバイスいただけること自体がうれしくてなりません 本当にありがとうございました

関連するQ&A

  • チェックボックスの判定

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

  • Excel VBAでCheckboxの名前を変数にとって値を調べたい

    Excel VBAでCheckboxの名前を変数にとって値を調べたいのです. シートにCheckboxがたくさん貼ってあり名前とOn,Offを調べたいのですが下記では名前は調べられてもOn,Offが確認できないのですが On,Offを別変数にとる場合タイプはなににすればいいでしょうか。 たとえば dim i as integer dim checkname() dim checvalue() as ???? i=0 for i=1 to 2 If Mid(ActiveSheet.Shapes(i).Name, 1, 5) = "Check" Then i=i+1 redim preserve checkname(i) checkname(i)=ActiveSheet.Shapes(i).Name redim preserve checvalue(i) checvalue(i)=ActiveSheet.Shapes(i).value <---これではエラー end if next i

  • CheckBoxの配列化

    Excel2000のVBAで以下のような処理をしたいのでご教示願います。 Userform1にCheckBox1~CheckBox10の10個のチェックボックスがあったとして以下のようにFor文でまとめて処理したいのですがうまくいきません。  For I = 1 to 10   UserForm1.CheckBox(I).value = True  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

  • VBAの変数について

    VBAでUserFormからデータを入力します。 入力された各データをTarget1~Target20に代入します。 各Targetにデータが入っている場合は、配列K(i)に「1」を格納します。 そこで、Target "1"~"20" を変数iであらわしたいのですが、どのように表現したらよいのでしょうか。 Dim i As Integer Dim K(20) As Integer Target1 = TextBox1.Value Target2 = ComboBox1.Value : : Target19 = TextBox12.Value Target20 = ComboBox8.Value For i = 1 To 20 If 『  ?   』 <> "" Then K(i) = 1 EndIf Next i

  • VBA初心者なのですが(Userformについて)

    まずは質問ご覧いただきありがとうございますm(_ _)m さっそくなのですが、次のプログラムを打つとSelect Caseのところで”指定されたオブジェクトは見つかりません”と出てしまうのですがなぜでしょうか。回答お待ちしております。 Private Sub CommandButton2_Click() Dim msg As String, i As Integer Dim ii As Integer, msg2 As String For i = 1 To 3 If Controls("CheckBox" & i).Value = True Then msg = msg & Controls("CheckBox" & i).Caption & vbCrLf End If Next i For ii = i To 2 If Controls("OptionBotton" & i).Value = True Then msg2 = msg2 & Controls("OptionBottob" & i).Caption & vbCrLf End If Next ii Select Case Controls("CheckBox" & i).Value & Controls("OptionBotton" & i).Value Case Controls("CheckBox" & i).Value = True & Controls("OptionBotton" & i).Value = False MsgBox msg & "がチェックされてます" Case Controls("CheckBox" & i).Value = False & Controls("OptionBotton" & i).Value = True MsgBox msg2 & "オン" Case Controls("CheckBox" & i).Value = True & Controls("OptionBotton" & i).Value = True MsgBox msg & "がチェックされています" & vbCrLf & msg2 & "オン" Case Else MsgBox "チェック又は、オンにしてください" End Select End Sub

  • vba boolean変数を開放する方法

    エクセルのセルに「○○○○○○○○○○××××××××××」と入っているものをランダムに並べ代えるマクロを探してみました。 Sub macro2() Dim i, m As Integer Dim b, c As String Dim flg(1 To 20) As Boolean b = Cells(1, 1).Value Randomize For i = 1 To 20 Do m = Int(20 * Rnd + 1) If flg(m) = False Then flg(m) = True Exit Do End If Loop c = c & Mid(b, m, 1) Next i Cells(1, 2).Value = c End Sub これはうまく動くのですが、10行分やろうとして、以下のように変更すると暴走(終わらない)します。 Sub macro2() Dim i, m, n As Integer Dim b, c As String Dim flg(1 To 20) As Boolean For n = 1 To 10 b = Cells(n, 1).Value Randomize For i = 1 To 20 Do m = Int(20 * Rnd + 1) If flg(m) = False Then flg(m) = True Exit Do End If Loop c = c & Mid(b, m, 1) Next i Cells(n, 2).Value = c next n End Sub 一行目が終わってもboolean変数の値がそのまま残っているのが原因らしいのですが開放する方法がわかりません。 取りあえずもう一つマクロを追加してやりたいことはできたのですが、 Sub macro1() Dim n As Integer For n = 1 To 10 Call macro2(n) Next n End Sub Sub macro2(n As Variant) 以下略 なんかスッキリしません。 boolean変数を開放し、マクロひとつですます方法を教えて頂きたくお願いします。 flg(m) = Falseを挿入してもダメでした。

  • エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?

    CheckBoxが CheckBox1,CheckBox2,…6 まであり、 If CheckBox1.Value = True Then… とするときに、数字「1」の部分を変数にしたいのですが、どのようにすれば可能でしょうか。 よろしくお願いします。

  • VBAのプログラムでCheckboxの使い方

    すみません。教えてください。 チェックボタンオブジェクト名を配列に格納したいのですが、可能でしょうか。 <内容> 例えば、チェックボタンオブジェクト名がcheckbox1~checkbox4まで在ったとき、"checkbox & 変数" にしたいのです。 <Sample> Sub CHECKBOX() Dim i As long For i = 1 To 4 With Worksheets(Sheet_No) On_Off(i) = .Controls("CheckBox" & i).Value End With Next i MsgBox (On_Off(2)) End Sub

  • Excel フォームコントロール オプション

    いつもお世話になってます。 ActiveXのOptionButtonやChekcBoxは複製Windowでは働かないので、フォームコントールを使おうと思います(フォームコントロールは動作します)。 例えばVBAなら,次のようにすればCheckBox2はoffになります。 これをフォームコントロールのチェック(ボックス)でやりたいのですが? Sub CheckBox1_Click() If CheckBox1.Value = True Then CheckBox2.Value = False" End Sub

専門家に質問してみよう