
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
を使い分けよう
コメント