VBATips

特定セル範囲で値が変更された時に処理を実行【WorkSheet_Change】【ExcelVBA】

特定セル範囲で値が変更された時、処理を実行させたい

特定条件を満たした場合に、マクロを起動させたい場合があります。
今回は、指定のセル範囲でセルの値が変更されていれば(変更した内容が指定した範囲に含まれていれば、)
任意の処理を実行するマクロを紹介します。

下記二点使用します。

  • 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 Thenxxx が Nothing の Not (存在していれば)となります。

結果、今回は セルの変更が 特定セル内に 含まれないの Not
対象とするワークシート内で、特定セル内に変更があれば if は Trueとなります。

注意点

  • Worksheet_Changeイベントのため、標準モジュールでは感知できません
  • 本コードは対象としたいWorkSheet内のシートモジュールに記述をする必要があります。
  • Is演算子は覚えておくと処理がしやすいです。別記事参照してIs演算子覚えましょう。
  • Not や Nothingなど比較する部分が多く、わかりずらいですが、表現に慣れましょう。

その他

エクセルやエクセル関数、VBAマクロも適材適所で使うべきです。
エクセル関数を駆使して、無理やり処理をしていて重すぎるブックは、上記を参考にマクロに置き換えましょう。

コメント

タイトルとURLをコピーしました