特定セル範囲で値が変更された時、処理を実行させたい
特定条件を満たした場合に、マクロを起動させたい場合があります。
今回は、指定のセル範囲でセルの値が変更されていれば(変更した内容が指定した範囲に含まれていれば、)
任意の処理を実行するマクロを紹介します。
下記二点使用します。
- Worksheet_Changeイベントでワークシートが変更された事を感知する
- Intersectメソッドで特定のセル範囲に含まれているかを判断します。
サンプルコード
Worksheet_Changeイベントのため、標準モジュールではなく、
感知させたいWorkSheet内にコードに記述します。
’■指定範囲内のセルが変更された場合にMsgBoxを表示する Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1:C3")) Is Nothing Then MsgBox "指定範囲内のセルが変更されました" End If End Sub
説明
上記の場合、セルが「A1からC3まで」に変更点があれば、MsgBoxが表示されます。
この部分を別プロシージャに飛ばすように変更する事で、指定範囲内に変更があればマクロが実行されます。
引数 Targetは指定した対象とするワークシート内で変更されたRangeを引数として使用します。
Intersect(target,range)で指定範囲内(Range)に Target があれば共通セルを返却、なければNothingとなります。
If Not xxx is Nothing Thenで xxx が Nothing の Not (存在していれば)となります。
結果、今回は セルの変更が 特定セル内に 含まれないの Not
=対象とするワークシート内で、特定セル内に変更があれば if は Trueとなります。
注意点
- Worksheet_Changeイベントのため、標準モジュールでは感知できません。
- 本コードは対象としたいWorkSheet内のシートモジュールに記述をする必要があります。
- Is演算子は覚えておくと処理がしやすいです。別記事参照してIs演算子覚えましょう。
- Not や Nothingなど比較する部分が多く、わかりずらいですが、表現に慣れましょう。
その他
エクセルやエクセル関数、VBAマクロも適材適所で使うべきです。
エクセル関数を駆使して、無理やり処理をしていて重すぎるブックは、上記を参考にマクロに置き換えましょう。
コメント