Excel VBA質問箱 IV

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

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


14006 / 76734 ←次へ | 前へ→

【68228】Re:EventMacroで、反応が指定外になる理由は
回答  UO3  - 11/2/16(水) 9:51 -

引用なし
パスワード
   ▼江々 さん:


おはようございます。

まず、コードにインデントを付けましょう。
そうしますと、見やすくなって、お困りの原因が何か、判断しやすくなります。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim i As Integer
  If Application.Intersect(Target, Range("A2")) Is Nothing Then Exit Sub
  If Range("A2") = "" Then Exit Sub
  With Target
    On Error Resume Next
    Select Case .Value
      Case i = 1 To 1000
        .Range("A1:A3").Interior.ColorIndex = 43
      Case Else
        .Range("A1:A3").Interior.ColorIndex = xlNone
    End Select
    On Error GoTo 0
  End With
End Sub

上記をよく見ますと With Target がありますね。
で、実際にはTargetがA2の場合にのみ、この処理をするわけですが、
たとえば .Range("A1:A3").Interior.ColorIndex = 43
.Range("A1:A3") は何に修飾されているかというと Targetです。
従って、これは Target.Range("A1:A3") つまり Range("A2").Range("A1:A3")
ということになります。

A2を起点にしたA1は、実際のA2。A2を起点にしたA3は実際のA4。
おわかりでしょうか。

シートモジュールのイベントルーティンですから、常に処理時は、このシートが
アクティベーと担っています。従ってここは
(アップされているコードが正常に動いているとして)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim i As Integer
  If Application.Intersect(Target, Range("A2")) Is Nothing Then Exit Sub
  If Range("A2") = "" Then Exit Sub
  Select Case Target.Value
    Case i = 1 To 1000
      Range("A1:A3").Interior.ColorIndex = 43
    Case Else
      Range("A1:A3").Interior.ColorIndex = xlNone
  End Select
End Sub
2 hits

【68226】EventMacroで、反応が指定外になる理由は 江々 11/2/16(水) 7:35 質問
【68227】Re:EventMacroで、反応が指定外... Jaka 11/2/16(水) 9:45 発言
【68231】Re:EventMacroで、反応が指定外... 江々 11/2/16(水) 20:01 質問
【68228】Re:EventMacroで、反応が指定外... UO3 11/2/16(水) 9:51 回答
【68229】Re:EventMacroで、反応が指定外... UO3 11/2/16(水) 10:02 発言
【68230】Re:EventMacroで、反応が指定外... Jaka 11/2/16(水) 10:21 発言

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