Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Set myRng = Application.Intersect(Target, Range("A1:D2,A4:D6"))
If myRng Is Nothing Then Exit Sub
If WorksheetFunction.CountA(myRng) = 0 Then
myRng.Value = "-"
ElseIf Intersect(Target, Range("A1")).Value = "139.8" Then
Range("B1:D1").Value = "-"
End If
End Sub
A1:D2範囲とA4:D6範囲内で、アクティブセルでDELETEキーを押した場合、"-"がセルに挿入されるようにコードを書きました。
さらに、A1セルの値がドロップダウンリストで139.8に変更された場合、B1、C1、D1に"-"を入力するようにしました。
A1セルの値を変更した場合の処理がうまくいかず四苦八苦しています。
ElseIf Intersect(Target, Range("A1")).Value = "139.8" Then
ここを、
Range("A1").value = "139.8" Then
にしてしまうとA1の値が139.8の状態ではB1、C1、D1へ数値を入力しても"-"となってしまいます。
A1からD1まで連動したリストがリアルタイムで動作するようにコードを書きたいのですが・・・なんとか教えていただけませんでしょうか・・
質問のコードは、IFステートメントが拙いです。
値を当てはめながらコードの流れを追っていけば分かるかと。。
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Set myRng = Intersect(Target, Range("A1:D2,A4:D6"))
If myRng Is Nothing Then Exit Sub
Application.EnableEvents = False '●●
If WorksheetFunction.CountA(myRng) = 0 Then
myRng.Value = "-"
End If
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Target.Value = "139.8" Then
Range("B1:D1").Value = "-"
End If
End If
Application.EnableEvents = True '●●
End Sub
'-------------------------------------------
今回のようなChangeイベントでは
●のEnableEventsプロパティは必須になります。
お礼
お礼遅くなってすみませんでした。 基礎から勉強してなんとか動作するようになりました。 ありがとうございました!!