• ベストアンサー

エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

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

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

↓のような感じでイベントの発生を制御できます。 'A1セル以外が変更されたら何もしない If Intersect(Target, Range("A1,C1,C2")) Is Nothing Then Exit Sub

nadasosou
質問者

お礼

ありがとうございます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) これに組み込んで出来ました。 intersect いろいろと使えそうですね

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

(1)セル範囲の行(Target.Row)や列(Target.column)を見て、以下や以上かのIF文でチェック (2)セル番地をArray関数で定義しておき、Targetと1つづつ該当するかチェック。飛び離れたセルなどのとき (3)セル範囲(Range)とTargetがInterseectするか判別。 http://www.geocities.co.jp/SiliconValley-SanJose/9236/subdoc2/0186.htm Intersect VBAで照会のこと。

nadasosou
質問者

お礼

このサイト、古いですが、基本的なことがいろいろ書かれていますね。 ありがとうございます。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

回答はでてますが、念のため。 ご存知かもしれませんが、処理の中でセルの内容を書き換える場合は Application.EnableEvents の設定を忘れずに行ってください。これを忘れると無限にイベントが呼び出される恐れがあります。 Private Sub Worksheet_Change(ByVal Target As Range) 'Targetの範囲チェック処理 Application.EnableEvents = False '更新処理 Application.EnableEvents = True End Sub

nadasosou
質問者

お礼

そんな処理が必要なときもあるんですね。勉強になります

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

#1です。 >'A1セル以外が変更されたら何もしない ↓の間違いでした。 'A1、C1、C2セル以外が変更されたら何もしない