EXCELVBA ChangeイベントとIntersect使って、指定した範囲内のセルが変更された時の制御を作る

EXCELVBA ChangeイベントとIntersect使って、指定した範囲内のセルが変更された時の制御を作る

EXCELで特定のセルが変更されたら、何か処理を行いたいという要望は多いと思います。

簡単な計算式ならば、数式でも対応は可能ですが、より柔軟な対応をしたい時には、プログラムで作って対応することもできます。

今回は、EXCEL VBAで指定した範囲のセルに入力された時に処理を行うプログラムをご紹介致します。

Advertisement

対象のシートのChangeイベントに処理を入れる

今回の処理にはChangeイベントを使います。

前回のプログレスバーは、トリガーにコマンドボタンを配置しました。Changeイベントは、対象のシート内で変更があると動く処理です。

 

 

オブジェクト(赤枠の箇所)にはworksheetを選択します。

プロシージャ(青枠の箇所)にはChangeを選択します。

Intersectの処理を書く

前段で作成したプロシージャの中に具体的な処理を書いていきます。

Intersectは、第一引数の範囲と第二引数の範囲の重複範囲を取得するメソッドです。

範囲が重複していれば、重複している範囲を取得し、重複していなければNothingを返します。

 

今回では、Intersectの第一引数にはChangeイベントの引数のtargetを指定し、第二引数には、指定範囲をRangeで指定します。

ここまでの段階を踏まえてサンプルを起こすと下記のようになります。

 

 

エラー回避等の補足

前段のサンプルに補足するのであれば

・targetの範囲を一つのセルに限定したいのであれば、target.cells.countが1であることをIntersectとAnd条件にすること

・変更したセルの入力値に制限をかけたいのであれば、さらに入力内容のチェックを行うこと

などを盛り込めば、実行時エラーのリスク回避になります。

補足を踏まえるとサンプルはこのような形になります。

 

 

範囲の指定については、列や行で指定したりシートのデータ最下行などを指定したりすることも可能です。

入力内容のチェックについても、空白以外に日付や数値なども入れるとよいと思います。

色々試してみてください。