[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『チェックボックスの連動』(みかん)
教えて下さい。
今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.