[[20080701215908]] 『チェックボックスの連動』(みかん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『チェックボックスの連動』(みかん)

教えて下さい。

今Excel2003を使っています(OSはWindowsXPです)。

あるチェックボックスにチェックをつけると、別のチェックボックスも自動的にチェックが入る設定はできるのでしょうか?

□チェックボックス1

□チェックボックス2

□チェックボックス3

□チェックボックス4

「チェックボックス1,2,3いずれかにチェックが入ると
チェックボックス4にも自動的にチェックが入る」
という設定にしたいです。

宜しくお願い致します。


 VBA になりますが、シートのチェックボックスの名前が CheckBox1〜CheckBox4とすると
 (プロパティで確認できます。)
 シートモジュールに下記で、そのような動作になると思います。

 Private Sub CheckBox1_Click()
    checkBoxs
 End Sub

 Private Sub CheckBox2_Click()
    checkBoxs
 End Sub

 Private Sub CheckBox3_Click()
    checkBoxs
 End Sub

 Private Sub CheckBox4_Click()
    checkBoxs
 End Sub

 Sub checkBoxs()
    If CheckBox1.Value Or CheckBox2.Value Or CheckBox3.Value Then
        CheckBox4.Value = True
    End If
 End Sub

 ということでしょうか。
 (Mook)

ありがとうございます。

VBAはほとんど使ったことがないのでもう少し教えてください。

教えて頂いたのを貼り付けてみましたが
「実行時エラー′424′ オブジェクトが必要です。」
と出てきました。

チェックボックスの名前はCheckBox1〜4までにしているのですが
他に何が足りないのでしょうか?

宜しくお願い致します。


 フォームのチェックボックスを使用しているとか?
 コントロールツールボックスのチェックボックスなら
 ちゃんと動作してますね。
 (ぽ)

 フォローありがとうございます。
 紛らわしいですが、チェックボックスは2種類あります。
 2003 や XP だと コントロールツールボックスのチェックボックスが上記の対象に
 なります(デフォルトの表示がアルファベット)。
 フォームのツールボックス(デフォルトの表示がカタカナ)では動作しません。
 (Mook)


 フォームのチェックボックスを使うとこのようになります。

 新規ブックの標準モジュールに

 '========================================================================
 Option Explicit
 '========================================================================
 Sub 準備()
    Dim rng As Range
    With ActiveSheet
       For Each rng In .Range("c3,c6,c9,c12")
          With .CheckBoxes.Add(rng.Left, rng.Top, rng.Width * 2, rng.Height)
             .Name = "チェックボックス" & StrConv(rng.Row / 3, vbWide)
             .Caption = "チェックボックス" & StrConv(rng.Row / 3, vbWide)
             .OnAction = "chk_click"
             End With
          Next
       End With
 End Sub
 '========================================================================
 Sub chk_click()
    Dim chk As Long
    If TypeName(Application.Caller) = "String" Then
       With ActiveSheet
          chk = .CheckBoxes(Application.Caller).Value
          If chk = 1 Then
             .CheckBoxes("チェックボックス4").Value = 1
             End If
          End With
       End If
 End Sub

 適当なシートをアクティブにした状態でプロシジャー「準備」を実行して確認してみてください。
 チェックボックスが4つ作成されますから、クリックして結果を確認してください。

 ichinose


 要は,各チェックボックスにチェックをつけると値は変化(true(真)またはfalse(偽))
になるので各チェックボックス の動作の後に(Private Sub CheckBox*_Click()の下)に
 そのチェックがtrue(真)かどうか判断してtrue(真)なら,他の希望のチェックボックス
をON(true)にするコードを記載しておけばいいというです。
 (花子)

 余談ですが,(Mook)さん のコードを少し変えてみました。
  質問者の希望がどうかわかりませんが,123にチェックが入っていれば
  4のボックスは解除できない方がいいのか,あるいは
   チェックした時に4にチェック同時にが入るだけで,4単独で
   4のチェックを解除できた方かいいのかどうかです。
      下記は,単にチェックした時に4にチェック同時にが入るだけの
    コードです。(花子)

 Private Sub CheckBox1_Click()
 If CheckBox1.Value Then
        CheckBox4.Value = True
        End If
 End Sub

 Private Sub CheckBox2_Click()
    If CheckBox2.Value Then
        CheckBox4.Value = True
        End If
 End Sub

 Private Sub CheckBox3_Click()
  If CheckBox3.Value Then
        CheckBox4.Value = True
         End If
 End Sub


 ichinoseさんのチェックボックスとコードをお借りして、
 1〜3のチェックが外れたらチェックボックスの4を解除する場合です。
Sub chk_click()
    Dim lng_flg As Long, i As Long, aaa
    Dim mychk
    mychk = Array("チェックボックス1", "チェックボックス2", "チェックボックス3")
    If TypeName(Application.Caller) = "String" Then
        With ActiveSheet
            For i = LBound(mychk) To UBound(mychk)
                lng_flg = (.CheckBoxes(mychk(i)).Value > 0) * -1 + lng_flg
            Next i
            If lng_flg > 0 Then
                .CheckBoxes("チェックボックス4").Value = 1
            Else
                .CheckBoxes("チェックボックス4").Value = 0
            End If
        End With
    End If
End Sub
 もっとスマートになりそうなんだけど・・・_/ ̄|○ il||li

 ところで花子さんの
 >(Mook)さん のコードを少し変えてみました。
 変えた意味が理解できませんが・・・_/ ̄|○ il||li

 (川野鮎太郎)

 >(Mook)さん のコードを少し変えてみました。
 変えた意味が理解できませんが・

 実際に両者で,いろいろの場合で4をチェックして
チェックを外したりしてみてください。
 違いが出ます。(花子)

 おそらく差異は、chekckbox4 のチェックが外せるかどうかだと思います。
 私の提示した部分で、checkbox4 のアクションを削除すれば同等になるでしょうか。
 (Mook)

 >checkbox4 のアクションを削除すれば同等になるでしょうか。
   いいえ

    4のチェックを外しておいて123のどれかのチェックを外した(入れないで外す)場合にも
    他にチェックが付いていると,勝手にチェックが入ってしまいます。

     質問者の言っていることは
        1,2,3のチャックを入れたら,4が入るということだけです。
       それ以外の指示はないわけですから,他の動作は不要かと思います。(花子)

みなさんありがとうございます。
少し勉強してみます

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.