- ベストアンサー
エクセル VBA チェックボックスの制限について
チェックボックス5個のうち 2つまでチェックを入れてもらい チェックボックスに対応する数値を セルに出力したいのです。 『実行』というボタンをつくったのですが、 チェックを入れ 実行ボタンを押し、 チェックが2つを超える場合に やり直しをさせるものを作りたいのです。 どなたかご教授お願いします。 VBA初心者です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
CheckBoxの名前を、オブジェクト変数に入れるとループ関数が使えます -------------------------------- Private Sub CommandButton1_Click() Dim ckbx(5) As Object Set ckbx(1) = CheckBox1 Set ckbx(2) = CheckBox2 Set ckbx(3) = CheckBox3 Set ckbx(4) = CheckBox4 Set ckbx(5) = CheckBox5 For i = 1 To 5 If ckbx(i).Value Then nx = nx + 1 End If Next If nx > 2 Then MsgBox "チェック、多すぎ" For i = 1 To 5 ckbx(i).Value = False Next Else ' 2個以下の場合の処理 MsgBox "2個以下" End If End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
>チェックボックス5個のうち (1)フォームに貼り付ける (2)シートに貼り付ける で差があるのだ。初心者で気がついてないのかもしれないが、質問に書いてない場合が多い。 ーー シート(下記ではSheet3)上に、の場合 Private Sub CommandButton1_Click() For Each chb In Worksheets("Sheet3").OLEObjects MsgBox chb.Name MsgBox chb.progID If chb.progID = "Forms.CheckBox.1" And chb.Object.Value = True Then n = n + 1 Next MsgBox n If n > 2 Then MsgBox "エラー" End Sub ーー Msgbox は納得したら削除のこと(エラー表示の行を除き)。
お礼
>チェックボックス5個のうち (1)フォームに貼り付ける で行っております。 シート上にも貼り付けれる方法は知りませんでした。 ご丁寧にありがとうございます。 シート上に貼り付ける方法を調べて実行してみようと思います。 ありがとうございました。
- Miho_Yuuki
- ベストアンサー率0% (0/1)
考え方としては 5つのチェックボックスを順に調べていき チェックが入っていれば用意した変数を インクリメント(カウントを増やす)し 最終的にその数が2以上ならばやり直させる というコードを書けばいいと思いますが、 おっしゃることが一つしか選択させないものを 作りたいというだけなら チェックボックスではなく ラジオボタンを使ったほうが効率がいいと思います。
お礼
チェックを1つではなく ”2つだけ”or”2つ以下” してもらいたいのです。 インクリメントについて勉強してみます。 ありがとうございました。
お礼
すぐに使える内容のものを 丁寧に教えて頂きありがとうございました。 参考にさせていただきます。