コンテンツにスキップ

Excel VBA エラーを処理する

VBAのエラーハンドリングについて

Excel VBAでは、他の言語のようなTry-catchの機能はないが
Go toを使って誘導したり、処理を変えたりすることは可能

On Error Go To

On Error Go Toの後に続く「引数」を用意し、引数:の後にエラー発生時の処理を記述する

Usage

Sub sample_Error()

    Dim functionName As String
    functionName = "sample_Error"

    Dim ws As Worksheet
    Set ws = Sheets("Sheet1")

    Dim str() As String
    Dim i As Long

    ' エラーを処理したい部分に宣言
    On Error GoTo Error

    For i = 1 To 5

        str = Split(ws.Cells(i, 1), "/")
        ws.Cells(i, 2) = str(0)
        ws.Cells(i, 3) = str(1)

    Next

' 正常の場合、Exit で処理が終了
Exit Sub

' エラー発生の場合の処理
Error:
    MsgBox(Now & vbTab & _
                    "エラー番号:" & Err.Number & vbTab & _
                    "エラー詳細:" & Err.Description & vbTab & _
                    "エラー関数:" & functionName & vbTab & _
                    "エラー箇所:" & "シート" & ActiveSheet.Name & "、" & i & "行目の処理")

    End ' 全体の処理を止めたい場合は「End」
End Sub

5行目でエラーが出るようにサンプルを用意
実行すると、エラー発生時にメッセージボックスに詳細がでる

error message

ログに出力するようにすると、保守のしやすさもアップする
呼び出し元も含めて全ての処理止めたい場合は、Endを用いる

Errオブジェクト

Errオブジェクトには、エラー発生時の様々な情報が格納される

プロパティ 説明
Number エラー番号
Description エラー詳細

他にもあるが、上の2つをおさえていれば十分

Reference

GoTo ステートメント
On Error ステートメント
Err オブジェクト
End ステートメント