|
▼けい さん:
こんにちは
結合セルでしたか。
そうしますと、Targetに入ってくる領域は結合されたセルアドレス(たとえば I30:J30 等)
なので I30 ではないわけです。かつ、この場合、Target.Count は結合されたセルの数。
ですから 1 ではありません。
・If Target.Count > 1 Then Exit Sub
これで抜けると具合が悪いので削除しましょう。
・If Intersect(Target, Range("I30")) Is Nothing Then Exit Sub
I30 が l30 (小文字のエル)になってますよ〜。
・If Target.Value = "" Then
結合セルが変更された場合、あるいは、複数領域が変更された場合(複数セルを選んでクリア
あるいは、複数セルをコピーした上でペースト)Targetは複数領域ですから、
たとえば Range("I30:J30").value というのは配列です。したがって、そのValue を参照すると
エラーになります。
結合セルでも、クリアではなく、値の入力の場合、I30 となりますけど、複数セル領域が入っている
と認識したほうがいいでしょうね。
Target(1).Value (領域の先頭の値)といった書き方をすることもありますが、
必ずしも I30 が先頭ではないですよね。
ですから、ここは、素直に、If Range("I30").Value = "" Then にされたらよろしいかと。
ということを加味して整理しますと
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As VbMsgBoxResult
If Application.Intersect(Target, Range("I30")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Range("I30").Value = "" Then
Range("I36").ClearContents
Else
P = MsgBox("有りですか?", vbYesNo)
If P = vbYes Then
Range("I36").Value = "有り"
Else
Range("I36").Value = "無し"
End If
End If
Application.EnableEvents = True
End Sub
|
|