プロが教える店舗&オフィスのセキュリティ対策術

シート名「昇降機【青紙】(裏面)」に
下記のコードを設定しております。
このコードは
各セル("A6, A12, A13")のごれか一つに「■」と表示された場合
他の2つのセルには何も表示されません。
各セル("A6, A12, A13")をプルダウンで選択し「■」を表示されると
このコードは上手く行くのですが、
例えば
セルA6に「=昇降機【青紙】チェックリスト!I27」の式で「■」を表示
同じく
セルA12に「=昇降機【青紙】チェックリスト!S27」の式で「■」を表示
セルA13に「=昇降機【青紙】チェックリスト!O27」の式で「■」を表示
されるように設定すると
コードが上手く行かず、
「=昇降機【青紙】チェックリスト!I27」
「=昇降機【青紙】チェックリスト!S27」
「=昇降機【青紙】チェックリスト!O27」
の「■」が全てのセルに表示されてしまします。
解決方法を教えてください。
現状のコード
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A6, A12, A13")

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
If Target.Value = "■" Then
Select Case Target.Address
Case "$A$6"
Range("A8").ClearContents
Range("A12").ClearContents
Range("A13").ClearContents
Range("A16").ClearContents
Range("A17").ClearContents

Case "$A$12"
Range("A6").ClearContents
Range("A8").ClearContents
Range("A13").ClearContents
Range("A16").ClearContents
Range("A17").ClearContents

Case "$A$13"
Range("A6").ClearContents
Range("A8").ClearContents
Range("A12").ClearContents
Range("A16").ClearContents
Range("A17").ClearContents


End Select
End If
End If

End Sub

以上です。
宜しくお願い致します。

A 回答 (1件)

こんにちは



>解決方法を教えてください。
シートのChangeイベントで拾っているため、ご質問のような計算(セル参照)による値の変化は、Changeとは見做されないので実行されないのが原因です。

変化の元となっているセル(=チェックリスト!I27など)のChangeイベントを拾うようにすれば、同様の方法で計算可能になります。

もしも、プルダウン等の直接入力と混在する場合には、両方のシートのChangeイベントを監視する必要があるので、シートのイベントではなく、ThisWorkbookのイベントとして処理する方が、まとめて処理できるので扱いやすいでしょう。


計算の発生をとらえれば良いのであれば、当該シートのCalculateイベントを拾っても(参照等の)計算を感知することは可能です。
しかしながら、Taget変数のようにどのセルが変化したかを示す引数はないので、対象のセルが変わったのかどうかを直接知るすべはありません。
(どこかに控えを取っておくなどの工夫が必要になります)
    • good
    • 1
この回答へのお礼

回答ありがとうございました
参考にさせて頂き、早速試してみます

お礼日時:2024/05/14 16:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A