|    | 
     ▼UO3 さん: 
 
こんにちは!ご回答いただきありがとうございました。 
手直しいただいたコードを貼り付け、ブレークポイントを設定して実行してみた結果、L30をDeleteした時はExit Subに飛んで終わっていました。 
 
空白として更新されたと認識されないようです。 
どうしたら空白と認識されるのでしょうか、、、 
 
 
>▼けい さん: 
> 
>こんにちは 
> 
>はずしているかもしれませんが・・・・ 
> 
>たとえば L30 を「セル削除」した場合、確かにTarget.Address は 
>$L$30 になります。 
>ただし、その値は Target.Value であれ Range("L30").Value であれ 
>「新しいL30」の値になります。(削除前のL30の値は返りません) 
> 
>ただし、「空白」、つまり、L30を「クリア」すれば、値は空白で返ってきます。 
>なので、ElseIf での処理がなされると思うのですが? 
> 
>ブレークポイントの設定と、ステップ実行はご存知でしょうか? 
>最初の If 文にブレークポイントを設定し、L30をクリアして、このコードでとまった後 
>F8を押しながら1ステップずつ実行させますと、コードが、どのような順序で実行されるのかが 
>わかります。是非、お試しください。 
> 
>それと、今回のケースでは、最初にTargetのアドレスをL30 と聞いていますので 
>実害はないのですが、L36へのセットで、Changeイベントが発生し、その瞬間に 
>このプロシジャに再入してきます。(イベントの連鎖) 
> 
>一般的には、処理の前に、 
>Application.EnableEvents = False と記述してイベント発生を抑止し 
>処理後に 
>Application.EnableEvents = True として復旧させますね。 
> 
>アップされたコードと基本、同じですが、少し手直ししたものを参考まで以下に。 
> 
>Private Sub WorkSheet_change(ByVal Target As Range) 
>  Dim P As VbMsgBoxResult 
>   
>  If Target.Address <> "$L$30" Then Exit Sub 
>   
>  Application.EnableEvents = False 
>     
>  If Range("L30") <> "" Then 
>   
>    P = MsgBox("有りですか?", vbYesNo) 
>     
>    If P = vbYes Then 
>     
>      Range("I36").Value = "有り" 
>   
>    Else 
>   
>      Range("I36").Value = "無し" 
>     
>    End If 
>     
>  Else 
>     
>    Range("I36").ClearContents 
>     
>  End If 
>   
>  Application.EnableEvents = True 
>   
>End Sub 
 | 
     
    
   |