ID非公開

2023/11/25 17:58

33回答

VBAのイベントについて教えて下さい。 A列とB列のセルの状態を変更することによって背景色を変えたいと思っているのですが、どうしたらいいのか分かりません。 条件ですが、

画像

Excel | Visual Basic111閲覧

ベストアンサー

NEW! この回答はいかがでしたか? リアクションしてみよう

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

回答してくださった方全員ありがとうございます。 初心者のため、いろいろな人のマクロの作り方がとても勉強になります。 感謝です。

お礼日時:2023/12/3 11:01

その他の回答(2件)

A列の変化は Worksheet_Change イベントで判定する。 チェックボックスがActiveXコントロールなら同じシートモジュールにClickイベントプロシージャを書く。 フォームコントロールのチェックボックスなら、そのすべてに共通のプロシージャをマクロ登録する。 自分でやるならチェックボックスは使わずに、セルに「レ」とか「×」とかにします。それなら Worksheet_Change だけで済む。

以下のマクロでどうでしょうか。 塗りつぶしの色は適当に変えてください。 Sheet1モジュールに Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A:B")) Is Nothing Then Exit Sub Call sample End Sub 標準モジュールに Sub call_cb() change_cb = Application.Caller cb_adrs = ActiveSheet.Shapes(change_cb).TopLeftCell.Address(False, False) Call sample End Sub Sub sample() Application.ScreenUpdating = False lastrow = Cells(Rows.Count, "C").End(xlUp).Row For Each cb In ActiveSheet.CheckBoxes cb_adrs = cb.TopLeftCell.Address(False, False) Set Rng = Range(cb_adrs) If Rng.Offset(, 1) <> "" Then If cb.Value = 1 Then If Rng.Offset(, -1) = "●" Then Rng.Offset(, -1).Resize(, 5).Interior.Color = rgbLightSkyBlue 'rgbDeepSkyBlue 'vbBlue Else Rng.Interior.Color = vbYellow End If Else Rng.Offset(, -1).Resize(, 5).Interior.Color = xlNone End If Else Rng.Offset(, -1).Resize(, 5).Interior.Color = xlNone End If Next Application.ScreenUpdating = True End Sub

この返信は削除されました