こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル VBA チェックボックスの制限について

チェックボックス5個のうち
2つまでチェックを入れてもらい
チェックボックスに対応する数値を
セルに出力したいのです。

『実行』というボタンをつくったのですが、

チェックを入れ
実行ボタンを押し、
チェックが2つを超える場合に
やり直しをさせるものを作りたいのです。

どなたかご教授お願いします。

VBA初心者です。

投稿日時 - 2009-11-17 18:18:53

QNo.5455645

すぐに回答ほしいです

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

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

投稿日時 - 2009-11-17 21:19:02

お礼

すぐに使える内容のものを
丁寧に教えて頂きありがとうございました。
参考にさせていただきます。

投稿日時 - 2009-11-18 00:44:53

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>チェックボックス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 は納得したら削除のこと(エラー表示の行を除き)。

投稿日時 - 2009-11-18 00:16:22

お礼

>チェックボックス5個のうち
(1)フォームに貼り付ける
で行っております。

シート上にも貼り付けれる方法は知りませんでした。
ご丁寧にありがとうございます。
シート上に貼り付ける方法を調べて実行してみようと思います。
ありがとうございました。

投稿日時 - 2009-11-18 00:39:08

ANo.1

考え方としては
5つのチェックボックスを順に調べていき
チェックが入っていれば用意した変数を
インクリメント(カウントを増やす)し
最終的にその数が2以上ならばやり直させる
というコードを書けばいいと思いますが、
おっしゃることが一つしか選択させないものを
作りたいというだけなら
チェックボックスではなく
ラジオボタンを使ったほうが効率がいいと思います。

投稿日時 - 2009-11-17 21:07:57

お礼

チェックを1つではなく
”2つだけ”or”2つ以下”
してもらいたいのです。

インクリメントについて勉強してみます。
ありがとうございました。

投稿日時 - 2009-11-18 00:46:22

あなたにオススメの質問