Excel VBAについて質問です。 シート上のA1~A4にチェックボックスを4つ縦に並べて(上からcheckbox1~4)

Excel | Visual Basic27閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

ThanksImg質問者からのお礼コメント

凄いです!やりたいことそのとおりだし、ここまでキレイにまとめれるんですね! これ参考にして進めます!ありがとうございました。

お礼日時:7/25 12:37

その他の回答(2件)

0

フォームコントロールのほうが(私には)いいですね。 ActiveXコントロールだとクラスモジュールに記述するのが面倒、というか私には難しいです。フォームコントロールなら簡単にできます。 A1:A4にフォームコントロールのチェックボックスを配置したら「test1」を実行します。これだけでいいです。 以下のコードは必ず標準モジュールに記述します。Sub test1()を実行すればあとは何もしなくてもいいです。 Sub test1() Dim ck As CheckBox For Each ck In ActiveSheet.CheckBoxes If Not Intersect(ck.TopLeftCell, Range("A1:A4")) Is Nothing Then ck.Caption = "" ck.LinkedCell = ck.TopLeftCell.Offset(, 1).Address ck.OnAction = "test2" End If Next End Sub Sub test2() Dim sp As Shape Set sp = ActiveSheet.Shapes(Application.Caller) If Not Intersect(Range("A1:A4"), sp.TopLeftCell) Is Nothing Then If sp.TopLeftCell.Offset(, 1) = False Then Range("B1:B4") = False Else Range("B1:B4") = True End If End If End Sub

0

私見ですが、「ActiveXコントロール」を使います。 コードは以下のようなものでしょうか?はずしていたら、読解力不足で、ごめんなさい。 Private Sub CheckBox1_Click() If (Me.CheckBox1.Value = True) Then Range("B1").Value = "TRUE" Else Application.EnableEvents = False Range("B1").Value = "FALSE" Me.CheckBox2.Value = False Range("B2").Value = "FALSE" Me.CheckBox3.Value = False Range("B3").Value = "FALSE" Me.CheckBox4.Value = False Range("B4").Value = "FALSE" Application.EnableEvents = True End If End Sub Private Sub CheckBox2_Click() If (Me.CheckBox2.Value = True) Then Application.EnableEvents = False Me.CheckBox1.Value = True Range("B1").Value = "TRUE" Range("B2").Value = "TRUE" Application.EnableEvents = True Else Application.EnableEvents = False Range("B2").Value = "FALSE" Me.CheckBox3.Value = False Range("B3").Value = "FALSE" Me.CheckBox4.Value = False Range("B4").Value = "FALSE" Application.EnableEvents = True End If End Sub Private Sub CheckBox3_Click() If (Me.CheckBox3.Value = True) Then Application.EnableEvents = False Me.CheckBox1.Value = True Range("B1").Value = "TRUE" Me.CheckBox2.Value = True Range("B2").Value = "TRUE" Range("B3").Value = "TRUE" Application.EnableEvents = True Else Application.EnableEvents = False Me.CheckBox4.Value = False Range("B3").Value = "FALSE" Range("B4").Value = "FALSE" Application.EnableEvents = True End If End Sub Private Sub CheckBox4_Click() If (Me.CheckBox4.Value = True) Then Application.EnableEvents = False Me.CheckBox1.Value = True Range("B1").Value = "TRUE" Me.CheckBox2.Value = True Range("B2").Value = "TRUE" Me.CheckBox3.Value = True Range("B3").Value = "TRUE" Range("B4").Value = "TRUE" Application.EnableEvents = True Else Range("B4").Value = "FALSE" End If End Sub

やりたいことはそのとおりです! でもやっぱり一つのチェックごとにそうなりますよね… チェックの数を増やしていく予定なので、もっとシンプルに出来たらと思いました