Excel VBA | 中級・上級 VBA 総合セット(100問)

VBA
スポンサーリンク

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 → デバッグ用の確認・計測
  • ログ出力 → 実務での原因追跡に必須
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました