A子さんVBAって、毎回ボタン押すのが前提だと思ってた…



それは第一歩だね。でも実は、もっと“自動で動く仕組み”がたくさんあるよ
結論:Excel VBAでは、ユーザーの操作(シート変更・ブック起動など)を「トリガー(引き金)」として、自動的に処理を実行できる仕組みが用意されています。
これを「イベントプロシージャ」と呼びます。
目次
イベントプロシージャとは?
「ボタンを押したとき」以外にも、次のようなタイミングでマクロを自動実行できます:
| イベントの種類 | 説明 |
|---|---|
| シート変更時 | セルの値が変更されたとき |
| セル選択時 | セルが選択されたとき |
| ブックを開いたとき | ブックを開いた瞬間 |
| ブックを閉じたとき | 閉じる直前 |
| 印刷時 | 印刷が実行されたとき |
セルの値が変更されたら自動で実行(Worksheet_Change)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2")) Is Nothing Then
MsgBox "セルB2の値が変わりました"
End If
End Sub
🔍 解説:
Worksheet_Changeは、ワークシート上で値が変更されたときに発動Targetは、変更されたセルの情報を受け取りますIntersectを使って「特定セルのみ反応させる」ことも可能
📌設置場所:対象のシートを右クリック →「コードの表示」で出るSheet1などに記述
ブックを開いた瞬間に処理(Workbook_Open)
Private Sub Workbook_Open()
MsgBox "ファイルが開かれました!ようこそ"
End Sub
📌設置場所:ThisWorkbook モジュール(VBEで「ThisWorkbook」をダブルクリック)に記述します。
ブックを閉じる直前に処理(Workbook_BeforeClose)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "保存は大丈夫ですか?"
End Sub
💡 できること:
- 「保存し忘れの確認」
- 「ログの記録」
- 「自動バックアップ」
セルを選んだら反応(Worksheet_SelectionChange)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "A1セルを選択しました"
End If
End Sub
活用例:
- 入力規則に基づく注意表示
- ガイド的なメッセージの表示
- 動的に画像や情報を切り替える仕組みのトリガー
イベントを使う際の注意点
| 注意点 | 内容 |
|---|---|
| 無限ループに注意 | Worksheet_Change の中で Target のセルを書き換えると、再度Changeが発動し続けます(回避にはApplication.EnableEvents = False) |
| 保守性 | 「どこに何を書いたか」がわかりにくくなるので、命名やログ出力の仕組みを併用すると◎ |
| 実行タイミング | イベントはユーザー操作によって発動するので、意図しない場面で動かないか要テスト |
まとめ:イベント処理で「本物の自動化」へ
VBAは「ボタンを押して実行」だけじゃない!
ワークシートやブックの状態変化をトリガーに処理を自動実行
場面に応じて Change や Open、BeforeClose を使い分けよう

コメント