- ベストアンサー
ExcelのWorksheet_ChangeイベントのTargetについて
特定のセルに値が入力されたときに特定の処理をしたいのですが、入力されたセルのアドレスが特定のセル(例えばK1)かどうか判定する方法を教えてください。 よろしく!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すでに回答されていますが、他のセルの値を変更する場合でもChangeイベントは、その都度余計に走りますので、 EnableEvents = Falseであらかじめイベントの起動を切っておいた方がいいかもしれません。 Private Sub Worksheet_Change(ByVal Target As Range) 'イベントを無効にする Application.EnableEvents =False If Target.Address = "$K$1" Then Range("A1").Value ="X"'(セルの値変更例) End If 'イベントを有効にする Application.EnableEvents = True End Sub なお、EnableEvents = Trueは必ず記述しないと、Excelアプリケーションのイベント無効の状態が持続されるので注意が必要です。
その他の回答 (2)
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 Targetは複数の場合もあるので、 if Target.Cells(1,1).Address = "$K$1" then のようにするか、 for each r in Target if r.Address = "$K$1" then なんかの処理 Exit for end if next r のようにループさせると良いです。
お礼
ありがとうございます。 Targetが複数あるという場合は、今回該当しないような気がするのですが、 もし、そのような場合でしたら、あるいは、今後そのような処理になったとき参考にしたいと思います。 いろいろ勉強になります。
- imogasi
- ベストアンサー率27% (4737/17069)
If Target.Address="$k$1" Then または If Target.Column=11 And Target.Row=1 Then ではどうでしょう。 Worksheet_Changeイベントは同一セルに使うと、循環状態になる恐れがあるので注意。
お礼
ありがとうございます。 Addressプロパティ(?)で参照できるのですか。 やってみます。 ところで、循環状態になるというのは、例えばK1セルに値を入力してその値でK1セルの値を変更するような処理のことでしょうか? 今回は他のセルを変更するので問題ないと思いますが、上のような処理をすることも今後考えられます。 そんなときはどうすればいいんでしょうね。
お礼
ありがとうございます。 Application.EnableEvents =False の記述は、K1セルに入力して、入力した値でK1セルに値を代入するようなマクロで特に威力を発揮しますね。 非常に勉強になりました。