VBAでセルの値が変更された時に自動的にプログラムを実行する方法

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。
SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。
お気軽にお問い合わせください。
はじめに
Excel VBAを使って、セルの値が変更されたときに自動でプログラムを実行する方法をご紹介します。このテクニックを使えば、日常の作業を効率化できること間違いありません。この記事では、VBAの基礎知識がある方を対象に、具体的なコード例とその解説を行います。
Worksheet_Changeイベントでセルの変更をキャッチする
Worksheet_Change
イベントは、ワークシート上のセルの値が変更された時に自動的に呼び出されるイベントです。このイベントを利用することで、特定のセルが変更された時に特定のアクションを実行することができます。
基本的なコードの書き方
まずは、基本的なコードを書いてみましょう。以下のコードは、シートのコードウィンドウに貼り付けます。
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "セルの値が変更されました!"
End Sub

シートのセルに値を入力してみます。

セルの値が変更されると、プログラムが実行されている!
応用例:特定のセルの変更を監視する
特定のセルの変更のみを監視する場合は、以下のようにコードを書きます。
Private Sub Worksheet_Change(ByVal Target As Range)
' セルA1が変更された時のみ実行
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
MsgBox "セルA1の値が変更されました!"
End If
End Sub
範囲を指定したい場合は、Me.Range(“A1:A3”) にする
気を付けるべきポイント
セルの値の変更をキャッチするプログラムを利用する際に気を付けるべきポイントがあります。
無限ループ
無限ループの例
セルの変更がイベントのトリガーとなる場合、無限ループを避けるためにイベントを一時停止することが重要です。A1のセルの変更でA1の変更をするようなプログラムだと無限ループしてしまいます。
Private Sub Worksheet_Change(ByVal Target As Range)
' セルA1が変更された時のみ実行
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
Me.Range("A1") = "おはようございます"
End If
End Sub
無限ループの対応策
では、イベントを一時停止する方法をご紹介します。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False ' イベントを一時停止
On Error GoTo ExitHandler ' エラー時にイベントを再度有効化
' セルA1が変更された時のみ実行
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
Me.Range("A1") = "おはようございます"
End If
ExitHandler:
Application.EnableEvents = True ' イベントを再度有効化
End Sub
Application.EnableEvents = False ‘ イベントを一時停止しよう!
変更範囲の限定
これは、当たり前のことですが、必要最低限の範囲に対してのみイベントを適用しましょう。
まとめ
VBAのWorksheet_Change
イベントを利用することで、セルの値が変更された際に自動的にプログラムを実行することができます。特定のセルの変更のみを監視することで、無駄な処理を避け、パフォーマンスを向上させ、さらに使いやすいシステムを作成することで業務効率化をすすめていくことができます。

稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント