Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

エクセルVBAのイベントについて教えてください。

エクセルVBA初学者のです。 "C9"にいれるとchangeイベントが発生するコードなんですが、 "C9"のほかに"D1"においてもchangeイベントを発生させたいのですが 下記のコードに続けて書いてもイベントが発生しないのですが どのように書けばよいのでしょうか? private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C9")) Is Nothing Then Exit Sub Range("H14:H56").Interior.ColorIndex = 2 If Intersect(Target, Range("D1")) Is Nothing Then Exit Sub Range("G14:G56").Interior.ColorIndex = 2 End Sub よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.3

方法はいつくかありますが、 折角ですから質問者のコードを尊重して書き直すとすると 以下のように、If~ElseIf~End構文を使うことになります。 '----------------------------- Private Sub Worksheet_Change(ByVal Target As Range)  If Not Intersect(Target, Range("C9")) Is Nothing Then    Range("H14:H56").Interior.ColorIndex = 2  ElseIf Not Intersect(Target, Range("D1")) Is Nothing Then    Range("G14:G56").Interior.ColorIndex = 2  End If End Sub '--------------------------------- If ●Not● Intersect(Target, Range("C9")) Is Nothing Then Notが挿入されていることを見落とさないようにしてください。 以上。  

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

これでどうでしょう。 private Sub Worksheet_Change(ByVal Target As Range) Dim A,B A = Target.Row B = Target.Column If (A=9 And B=3) Or (A=1 And B=4) then Range("G14:G56").Interior.ColorIndex = 2 End If End Sub

すると、全ての回答が全文表示されます。
回答No.2

ANo.1 と同じですが、 そのコード構成ですと、最初の IF 文で C9 であり、かつ次の IF 文で D1 であった場合のみに実行されるコードになります。 一つのセルが C9 かつ D1 であるというのは、ありえませんよね。 こういう場合は、最初に Target.Address で変更されたセルを判定するというやり方になると思います。 一般的な方法としては IF のネストか Select Case ステートメントの利用になるかなと思います。 それと蛇足ではありますが... > "C9"にいれるとchangeイベントが発生するコード Change イベントは、当該シートのセルが変更された時に発生します。 ですので、 「Change イベントが発生した時に Target が C9 だった場合にコードが実行される」 あるいは、 「Target が C9 だった場合のみに実行されるコードを Change イベントに記述する」 というのが正しいかと思います。 くだらない言い回しだけの解釈の違いと思われるかもしれませんが、こうした部分を正確に理解していないと後々苦労する事もあるかもしれないという事で。m(_ _)m

すると、全ての回答が全文表示されます。
  • ibu_gula
  • ベストアンサー率0% (0/2)
回答No.1

これですと、1つめの IF文、C9はそのまま次の文に行きますが、 D1ですと、Then Exit Sub で 終わってしまうからですね。 そこを直してあげればいいんだと思います。 あと、こういった場合最初のIf文あたりにブレークポイントを設定して、 ステップインで実行させていくと、 動きが見えるからわかりやすいのではないでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A