|    | 
     ▼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 
 | 
     
    
   |