|    | 
     ▼けい さん: 
 
こんにちは 
 
結合セルでしたか。 
そうしますと、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 
 | 
     
    
   |