質問: xlOn End If End Sub ``` ### やりたいこと 1チェックボックスは少なくとも全部で4つ(チェックボックス1,2,7,8)あり、チェックボックス1と2が両方ともチェックが入ったときにのみチェックボックス7に自動的にチェックが入る(実現済み) 2上記1でチェックボックス7にチェックが入ったことにより、自動的にチェックボックス8にチェックが入る 実際は2でチェックボックス7にマクロによって自動的にチェックが入ったときに、それを検知してチェックボックスへのチェックのほかにもいろいろな何らかの特定の処理が行えるようにしたいですが、マクロでチェックが入った場合は通常の`Sub チェック8_Click()・・`では検知できないようです。
回答: んと、いろいろ知っておく必要があることがありますが、 やりたいことから離れてしまうので混乱を避けるため、要点のみ。 フォームコントトールのチェックボックスをクリックした時にマクロを起動したいなら、 1)フォームコントロールは図形の一種と考える 2)図形と同じで、標準モジュールに書かれたマクロを登録する 3)クリックされた図形の名前はApplication.Caller プロパティで取得する ということになります。 で、やりたいことは、 「チェックボックス 1」クリックでマクロが起動されたときに、 「チェックボックス 1」がOnの状態になっていたら、 「チェックボックス 2」と「チェックボックス 3」を選択可能なオフの状態にする。 そうでなければ、淡色表示の状態にする 「チェックボックス 7」クリックでマクロが起動されたときに、 「チェックボックス 7」がOnの状態なら、 「チェックボックス 8」をOffの状態にする。 そうでなければ淡色表示にする。 という事でしょうか? 上記をVBAに翻訳するとだいたい以下のようになります。 ``` Option Explicit Sub チェックボックス_テスト() Dim sBoxName As String Dim flg As Long 'マクロを呼び出した図形の名前を取得 sBoxName = Application.Caller With ActiveSheet.CheckBoxes Select Case sBoxName Case "Check Box 1", "Check Box 7" flg = IIf(.Item(sBoxName).Value = xlOn, xlOff, xlMixed) If sBoxName = "Check Box 1" Then .Item("Check Box 2").Value = flg .Item("Check Box 3").Value = flg Else .Item("Check Box 8").Value = flg End If End Select End With End Sub ```