こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル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

よろしくお願いします。

投稿日時 - 2008-04-10 13:13:11

QNo.3937327

困ってます

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

方法はいつくかありますが、
折角ですから質問者のコードを尊重して書き直すとすると
以下のように、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が挿入されていることを見落とさないようにしてください。
以上。
 

投稿日時 - 2008-04-10 15:56:53

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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

投稿日時 - 2008-04-11 09:55:41

ANo.1 と同じですが、

そのコード構成ですと、最初の IF 文で C9 であり、かつ次の IF 文で D1 であった場合のみに実行されるコードになります。
一つのセルが C9 かつ D1 であるというのは、ありえませんよね。

こういう場合は、最初に Target.Address で変更されたセルを判定するというやり方になると思います。
一般的な方法としては IF のネストか Select Case ステートメントの利用になるかなと思います。


それと蛇足ではありますが...

> "C9"にいれるとchangeイベントが発生するコード

Change イベントは、当該シートのセルが変更された時に発生します。
ですので、
「Change イベントが発生した時に Target が C9 だった場合にコードが実行される」
あるいは、
「Target が C9 だった場合のみに実行されるコードを Change イベントに記述する」
というのが正しいかと思います。

くだらない言い回しだけの解釈の違いと思われるかもしれませんが、こうした部分を正確に理解していないと後々苦労する事もあるかもしれないという事で。m(_ _)m

投稿日時 - 2008-04-10 14:31:32

ANo.1

これですと、1つめの IF文、C9はそのまま次の文に行きますが、
D1ですと、Then Exit Sub で 終わってしまうからですね。
そこを直してあげればいいんだと思います。

あと、こういった場合最初のIf文あたりにブレークポイントを設定して、
ステップインで実行させていくと、
動きが見えるからわかりやすいのではないでしょうか?

投稿日時 - 2008-04-10 13:51:31

あなたにオススメの質問