|
▼江々 さん:
おはようございます。
まず、コードにインデントを付けましょう。
そうしますと、見やすくなって、お困りの原因が何か、判断しやすくなります。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim i As Integer
If Application.Intersect(Target, Range("A2")) Is Nothing Then Exit Sub
If Range("A2") = "" Then Exit Sub
With Target
On Error Resume Next
Select Case .Value
Case i = 1 To 1000
.Range("A1:A3").Interior.ColorIndex = 43
Case Else
.Range("A1:A3").Interior.ColorIndex = xlNone
End Select
On Error GoTo 0
End With
End Sub
上記をよく見ますと With Target がありますね。
で、実際にはTargetがA2の場合にのみ、この処理をするわけですが、
たとえば .Range("A1:A3").Interior.ColorIndex = 43
.Range("A1:A3") は何に修飾されているかというと Targetです。
従って、これは Target.Range("A1:A3") つまり Range("A2").Range("A1:A3")
ということになります。
A2を起点にしたA1は、実際のA2。A2を起点にしたA3は実際のA4。
おわかりでしょうか。
シートモジュールのイベントルーティンですから、常に処理時は、このシートが
アクティベーと担っています。従ってここは
(アップされているコードが正常に動いているとして)
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim i As Integer
If Application.Intersect(Target, Range("A2")) Is Nothing Then Exit Sub
If Range("A2") = "" Then Exit Sub
Select Case Target.Value
Case i = 1 To 1000
Range("A1:A3").Interior.ColorIndex = 43
Case Else
Range("A1:A3").Interior.ColorIndex = xlNone
End Select
End Sub
|
|