MENU

【初心者向け】VBAはボタンだけじゃない!セルの変更やブックを開いたときに自動で動くイベント処理とは?

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は「ボタンを押して実行」だけじゃない!

ワークシートやブックの状態変化をトリガーに処理を自動実行

場面に応じて ChangeOpenBeforeClose を使い分けよう

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次