 A子さん
A子さん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処理」の単純化が成功のコツ

コメント