- VBA イベント処理 練習問題(10問)+ 解答解説
- Q1. Worksheet_Change イベントで、B列に入力された値が 100 未満なら赤字にせよ
- Q2. Workbook_Open イベントで、特定シートを自動的に表示せよ
- Q3. Worksheet_BeforeDoubleClick イベントで、セルをダブルクリックしたらメッセージを表示せよ
- Q4. Worksheet_BeforeRightClick イベントで、右クリックしたら独自メッセージを表示せよ
- Q5. Worksheet_SelectionChange イベントで、選択セルが変わるたびにアドレスを表示せよ
- Q6. Workbook_BeforeClose イベントで、保存確認メッセージを表示せよ
- Q7. Worksheet_Change イベントで、入力値が「@」を含まなければエラーメッセージを出せ(メールアドレスチェック)
- Q8. Workbook_SheetChange イベントで、全シートの変更を監視せよ
- Q9. Worksheet_Activate イベントで、シートを開いたら背景色を変更せよ
- Q10. Workbook_NewSheet イベントで、新しいシートが追加されたらメッセージを表示せよ
- ✅ 総まとめ
VBA イベント処理 練習問題(10問)+ 解答解説
Excel VBA の「イベント処理」は、ユーザーの操作やブックの状態変化に応じて自動的にコードを実行する仕組みです。
ここでは 代表的なイベント処理の練習問題 10問 を用意し、模範コードと解説を添えています。
Q1. Worksheet_Change イベントで、B列に入力された値が 100 未満なら赤字にせよ
解答例
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Columns("B")) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value < 100 Then
Target.Font.Color = vbRed
End If
End If
End Sub
VB解説:Worksheet_Change はセルの内容が変更されたときに発火。Intersect で対象列を限定。
Q2. Workbook_Open イベントで、特定シートを自動的に表示せよ
解答例
Private Sub Workbook_Open()
ThisWorkbook.Sheets("Report").Activate
End Sub
VB解説:Workbook_Open はブックを開いた瞬間に実行される。起動時に特定シートを表示する用途に便利。
Q3. Worksheet_BeforeDoubleClick イベントで、セルをダブルクリックしたらメッセージを表示せよ
解答例
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox "セル " & Target.Address & " をダブルクリックしました"
Cancel = True '既定の編集モードをキャンセル
End Sub
VB解説:
ダブルクリック時に発火。Cancel = True で通常の編集モードを抑止できる。
Q4. Worksheet_BeforeRightClick イベントで、右クリックしたら独自メッセージを表示せよ
解答例
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
MsgBox "右クリックしました: " & Target.Address
Cancel = True '既定のコンテキストメニューをキャンセル
End Sub
VB解説:
右クリックイベントを捕捉。独自のメニューや処理を組み込める。
Q5. Worksheet_SelectionChange イベントで、選択セルが変わるたびにアドレスを表示せよ
解答例
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Debug.Print "選択セル: " & Target.Address
End Sub
VB解説:
セル選択が変わるたびに発火。選択範囲の監視や入力補助に使える。
Q6. Workbook_BeforeClose イベントで、保存確認メッセージを表示せよ
解答例
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("保存しますか?", vbYesNo) = vbYes Then
Me.Save
End If
End Sub
VB解説:
ブックを閉じる直前に発火。保存確認や処理の強制実行に利用できる。
Q7. Worksheet_Change イベントで、入力値が「@」を含まなければエラーメッセージを出せ(メールアドレスチェック)
解答例
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Columns("C")) Is Nothing Then
If Target.Value <> "" And InStr(Target.Value, "@") = 0 Then
MsgBox "メールアドレス形式が不正です"
End If
End If
End Sub
VB解説:
入力チェックの典型例。文字列判定に InStr を使用。
Q8. Workbook_SheetChange イベントで、全シートの変更を監視せよ
解答例
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Debug.Print "シート " & Sh.Name & " の " & Target.Address & " が変更されました"
End Sub
VB解説:Workbook_SheetChange は全シートの変更を監視できる。監査ログ用途に便利。
Q9. Worksheet_Activate イベントで、シートを開いたら背景色を変更せよ
解答例
Private Sub Worksheet_Activate()
Me.Cells.Interior.Color = RGB(240, 240, 240)
End Sub
VB解説:
シートがアクティブになった瞬間に発火。視覚的に「今どのシートか」を強調できる。
Q10. Workbook_NewSheet イベントで、新しいシートが追加されたらメッセージを表示せよ
解答例
Private Sub Workbook_NewSheet(ByVal Sh As Object)
MsgBox "新しいシートが追加されました: " & Sh.Name
End Sub
VB解説:
シート追加を検知できる。自動初期化やテンプレート適用に応用可能。
✅ 総まとめ
- Worksheet 系イベント → セル操作や選択・クリックを監視
- Workbook 系イベント → ブックの開閉・シート追加などを監視
- 実務用途 → 入力チェック、保存確認、監査ログ、UIカスタマイズ


