Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10221 / 76734 ←次へ | 前へ→

【72063】Re:セル更新時のマクロ
発言  UO3  - 12/5/23(水) 12:44 -

引用なし
パスワード
   ▼けい さん:

こんにちは

結合セルでしたか。
そうしますと、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
11 hits

【72043】セル更新時のマクロ けい 12/5/21(月) 19:27 質問
【72044】Re:セル更新時のマクロ ponpon 12/5/21(月) 23:42 発言
【72051】Re:セル更新時のマクロ けい 12/5/22(火) 14:46 質問
【72047】Re:セル更新時のマクロ UO3 12/5/22(火) 11:14 発言
【72050】Re:セル更新時のマクロ けい 12/5/22(火) 14:04 質問
【72054】Re:セル更新時のマクロ UO3 12/5/22(火) 21:46 発言
【72060】Re:セル更新時のマクロ けい 12/5/23(水) 11:07 質問
【72055】Re:セル更新時のマクロ UO3 12/5/22(火) 21:51 発言
【72061】Re:セル更新時のマクロ けい 12/5/23(水) 11:34 質問
【72063】Re:セル更新時のマクロ UO3 12/5/23(水) 12:44 発言
【72066】Re:セル更新時のマクロ けい 12/5/23(水) 13:53 お礼
【72052】Re:セル更新時のマクロ ponpon 12/5/22(火) 15:01 発言

10221 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free