
Excelで入力や保存のタイミングに“自動で動く仕組み”が欲しいんだけど、ボタン押すのは面倒で…



「それなら“イベント×VBA”で実現できるかもしれないよ。今日は実務で使える2つの例を紹介しよう
目次
たとえば、「帳票を編集して保存するたびに、印刷されてほしい」といった業務は多くあります。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ThisWorkbook.Sheets("請求書").PrintOut End Sub
🔍 解説
Workbook_BeforeSave
は、保存処理の直前に動きます。PrintOut
を使って指定シートを自動印刷。- 保存先や保存形式に関係なく、印刷されます。
📌設置場所:ThisWorkbook に記述します。
入力が完了したら背景色を変更する(Worksheet_Change)
「この列は記入済みなのかどうか?」を一目で確認できると便利ですよね。
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B2:B100")) Is Nothing Then If Target.Value <> "" Then Target.Interior.Color = RGB(198, 239, 206) ' 薄緑 Else Target.Interior.ColorIndex = xlNone End If End If End Sub
🔍 解説
Worksheet_Change
は、セルの値が変更されたときに自動発動。Intersect
で対象列を限定(ここではB2:B100)。- 値が入ったら背景色を設定、空欄になったら元に戻す。
📌設置場所:対象シートのコードモジュールに記述
応用テクニック:複数条件やチェック連携にも使える!
保存時印刷 × 特定条件
→ 印刷の前に「請求番号が空なら印刷しない」など条件追加も可能。
入力完了 × チェックマーク表示
→ 入力完了セルの横に「✓」を自動で表示するなども組み合わせ可能。
実装時の注意点
注意点 | 内容 |
---|---|
無限ループ注意 | Worksheet_Change 内でセルを書き換えると再発火します。対策としてApplication.EnableEvents = False の使用が有効。 |
印刷制御の有無 | Workbook_BeforeSave で印刷は強制実行なので、ユーザーが驚かないようメッセージ表示を入れても◎ |
シート保護の影響 | 対象セルが保護されている場合、変更が効かないため要注意。 |
まとめ:イベント処理で業務の“気づかい”を自動化しよう
VBAのイベント処理は「手動のひと手間」を減らすのに最適
保存時や入力時に“ちょっと便利”な動作を仕込んでおくと業務効率UP
無理に複雑化せず、「1アクション=1処理」の単純化が成功のコツ
コメント