|
▼UO3 さん:
ようやく成功しました!感激です。
If Application.Intersect(Target, Range("I30:AG30")) Is Nothing Then Exit Sub
というようにセルの範囲を指定したらうまくいきました。
ほんとうにありがとうございました。
>▼けい さん:
>
>こんにちは
>
>結合セルでしたか。
>そうしますと、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
|
|