VBA イベントプロシージャ

プロシージャ

VBA(Visual Basic for Applications)におけるイベントプロシージャは、ユーザーの操作やアプリケーションの動作(例:セルの変更、ボタンのクリック、ブックの開閉など)に自動的に応答する処理です。これは「イベント駆動型プログラミング」の一種であり、ユーザーの行動やシステムの変化をトリガーにして動作する特別なプロシージャです。


◆ イベントプロシージャとは?

イベントプロシージャとは、ユーザーが操作したタイミングや、特定の状況が発生したときに自動的に呼び出されるサブルーチン(Subプロシージャ)です。

例:

  • セルの内容が変更されたとき
  • ワークブックが開かれたとき
  • ユーザーフォーム上のボタンがクリックされたとき

◆ 基本的な特徴

  • Subプロシージャとして記述される。
  • Functionではなく、必ずSubで定義される。
  • 特定の命名規則で自動的にトリガーされる。
  • 一般的には「Workbook」「Worksheet」「UserForm」などのオブジェクトに関連付けられる

◆ イベントプロシージャの種類

【1】Worksheet関連のイベント

対象:シート上での操作

例:

イベント名説明
Worksheet_Changeセルの値が変更されたとき
Worksheet_SelectionChangeセルが選択されたとき
Worksheet_BeforeDoubleClickダブルクリックされたとき
Worksheet_Activateシートがアクティブになったとき

【2】Workbook関連のイベント

対象:ブック全体に対するイベント

例:

イベント名説明
Workbook_Openブックを開いたとき
Workbook_BeforeCloseブックを閉じる直前
Workbook_SheetChange任意のシートでセルが変更されたとき

【3】UserFormのイベント

対象:フォーム上のコントロール(ボタン、テキストボックスなど)

例:

イベント名説明
CommandButton_Clickボタンがクリックされたとき
TextBox_Changeテキストボックスの内容が変更
UserForm_Initializeフォームが開かれたとき

◆ イベントプロシージャの記述方法

Worksheetの例

  1. VBAエディタで対象のシート(例:「Sheet1」)をダブルクリック。
  2. 上部のドロップダウンで「Worksheet」、右側で「Change」を選択。

自動的に以下のようなコードが生成されます

Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "セルが変更されました: " & Target.Address
End Sub

Workbookの例

  1. VBAエディタで「ThisWorkbook」を選択。
  2. ドロップダウンから「Workbook」「Open」などを選択。
Private Sub Workbook_Open()
MsgBox "このブックが開かれました!"
End Sub

UserFormの例

  1. ユーザーフォーム上のボタンなどをダブルクリック。
Private Sub CommandButton1_Click()
MsgBox "ボタンがクリックされました"
End Sub

◆ イベントプロシージャの引数の例

引数を利用すると、より柔軟な処理が可能です。

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
MsgBox "A列が変更されました。"
End If
End Sub

上記では、A1〜A10の範囲が変更された場合のみ処理されます。


◆ EnableEventsの制御

コード実行中にイベントが再帰的に発生してしまうのを防ぐため、Application.EnableEvents を使うことがあります。

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
' イベント処理(たとえばセルを書き換えるなど)
Application.EnableEvents = True
End Sub

◆ イベントプロシージャの無効化・制御

一時的にイベントを無効にしたい場合:

Application.EnableEvents = False
' 処理
Application.EnableEvents = True

これは、自動更新や無限ループの回避に非常に重要です。


◆ よくある用途例

用途イベント
入力監視・バリデーションWorksheet_Change
ブック起動時の初期処理Workbook_Open
閉じる前に保存を促すWorkbook_BeforeClose
入力があったら背景色を変えるWorksheet_Change + Interior
フォーム入力チェックCommandButton_Click, TextBox_Change

◆ 注意点

  • イベント名を正しく記述しないと自動で発火しません
  • 無限ループに注意(イベント中に再度セル変更などを行うときは EnableEvents を使う)。
  • 標準モジュールに記述してもイベントは発火しません。対象オブジェクト(シート、ブック、フォーム)に書く必要があります。
  • Public ではなく Private として記述するのが基本。

◆ まとめ

項目内容
トリガーユーザー操作やシステム動作(変更、クリックなど)
書き方特定の構文・引数に従った Sub プロシージャ
書く場所「Sheet1」「ThisWorkbook」「UserForm」など
主なイベントChange, Open, Click, Initializeなど
応用入力監視、データ制御、自動処理、UI制御など

イベントプロシージャは、VBAの自動化処理の中核とも言える重要な仕組みです。ユーザーの入力やアクションに即応する仕組みを作ることで、柔軟で使いやすいVBAツールの構築が可能になります。

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