VBA エラー処理・デバッグ 練習問題(10問)+ 解答解説
Excel VBA では エラー処理とデバッグが非常に重要です。実務では「エラーで止まらないようにする」「原因を特定する」「処理を安全に終了させる」ことが求められます。ここでは代表的な 10問 を用意し、模範コードと解説を添えています。
Q1. On Error Resume Next を使って、存在しないシートを参照した場合にエラーを無視せよ
解答例
Sub IgnoreError()
On Error Resume Next
Sheets("NotExist").Activate
On Error GoTo 0
End Sub
VB解説:On Error Resume Next はエラーを無視して次の行へ進む。終了後は On Error GoTo 0 で通常状態に戻す。
Q2. On Error GoTo を使って、エラー発生時にメッセージを表示せよ
解答例
Sub HandleError()
On Error GoTo ErrHandler
Dim x As Long
x = 10 / 0 'ゼロ除算エラー
Exit Sub
ErrHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
VB解説:On Error GoTo ラベル でエラー時にジャンプ。Err.Description で内容を取得。
Q3. エラー番号を判定して処理を分岐せよ
解答例
Sub ErrorNumberCheck()
On Error GoTo ErrHandler
Dim x As Long
x = 10 / 0
Exit Sub
ErrHandler:
Select Case Err.Number
Case 11: MsgBox "ゼロ除算エラー"
Case Else: MsgBox "その他のエラー: " & Err.Description
End Select
End Sub
VB解説:Err.Number でエラー種類を判定できる。
Q4. エラー発生時にログファイルへ書き込め
解答例
Sub ErrorLog()
On Error GoTo ErrHandler
Dim x As Long
x = 10 / 0
Exit Sub
ErrHandler:
Dim fNum As Integer
fNum = FreeFile
Open "C:\Users\Public\errorlog.txt" For Append As #fNum
Print #fNum, Now & " - " & Err.Number & ": " & Err.Description
Close #fNum
End Sub
VB解説:
ログファイルに記録しておけば、後で原因調査が可能。
Q5. デバッグ用に処理時間を計測せよ
解答例
Sub MeasureTime()
Dim startTime As Double
startTime = Timer
'処理(例: ループ)
Dim i As Long
For i = 1 To 1000000
Dim x As Double
x = Sqr(i)
Next i
Debug.Print "処理時間: " & Timer - startTime & " 秒"
End Sub
VB解説:Timer 関数で秒数を取得。処理時間の測定に便利。
Q6. デバッグ用に変数の値をイミディエイトウィンドウへ出力せよ
解答例
Sub DebugVariable()
Dim total As Double
total = 123.45
Debug.Print "合計 = " & total
End Sub
VB解説:Debug.Print は開発時の確認に必須。実務ではログ代わりにも使える。
Q7. Stop ステートメントを使って処理を一時停止せよ
解答例
Sub StopExample()
Dim x As Long
x = 10
Stop
MsgBox "処理再開: x = " & x
End Sub
VB解説:Stop はデバッグ中に処理を強制停止し、変数の中身を確認できる。
Q8. Resume を使ってエラー処理後に再開せよ
解答例
Sub ResumeExample()
On Error GoTo ErrHandler
Dim x As Long
x = 10 / 0
Exit Sub
ErrHandler:
MsgBox "エラー発生: " & Err.Description
Resume Next
End Sub
VB解説:Resume Next でエラー行の次から再開できる。Resume ならエラー行を再試行。
Q9. Err.Clear を使ってエラー情報をリセットせよ
解答例
Sub ClearError()
On Error Resume Next
Sheets("NotExist").Activate
If Err.Number <> 0 Then
MsgBox "エラー: " & Err.Description
Err.Clear
End If
End Sub
VB解説:Err.Clear でエラー情報を消去。次の処理に影響させない。
Q10. エラー処理を組み込み、異常終了を防げ
解答例
Sub SafeProcess()
On Error GoTo ErrHandler
'処理例
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\Public\data.xlsx")
wb.Sheets(1).Range("A1").Value = "OK"
wb.Close SaveChanges:=True
Exit Sub
ErrHandler:
MsgBox "処理中にエラーが発生しました: " & Err.Description
End Sub
VB解説:
エラー処理を組み込むことで、異常終了せずに安全に処理を終えられる。
✅ 総まとめ
- On Error Resume Next → エラーを無視して続行
- On Error GoTo → エラー時に処理を分岐
- Err.Number / Err.Description → エラー情報の取得
- Err.Clear → エラー情報リセット
- Debug.Print / Stop / Timer → デバッグ用の確認・計測
- ログ出力 → 実務での原因追跡に必須


