On Error GoTo 0とは?VBAのエラー処理をやさしく解除する方法

VBAでマクロを書いていると、On Error GoTo 0 というコードを見かけることがあります。

少し難しそうに見えますが、意味はシンプルで、それまでのエラー処理をいったん解除して、ふつうの状態に戻す命令です。

特に On Error Resume Next と一緒に出てくることが多いので、セットで覚えると理解しやすくなります。

「一時的にエラーを無視したあと、ちゃんと元に戻すためのコード」と考えるとイメージしやすいです。

On Error GoTo 0 の意味

On Error GoTo 0 は、VBAで設定されているエラー処理を解除します。

つまり、エラーを特別に扱う設定をやめて、VBAの標準の動きに戻す役割があります。

VBAでは、何もエラー処理を書いていないと、エラーが起きたときに処理が止まってメッセージが表示されます。

On Error GoTo 0 は、その普通の状態に戻すための命令です。

On Error Resume Next との違い

On Error Resume Next は、エラーが起きても止まらずに次の行へ進む命令です。

一方で On Error GoTo 0 は、その「エラーを無視する設定」を解除します。

たとえば、存在するか分からないシートを確認するときなどに、一時的に Resume Next を使うことがあります。

でも、そのままにしておくと、あとで起きたエラーまで見逃してしまうので、最後に GoTo 0 を入れて元に戻します。

使い方の例

次のように書くと、シートの有無を確認しやすくなります。

Sub Sample()
    Dim ws As Worksheet
    
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    On Error GoTo 0
    
    If ws Is Nothing Then
        MsgBox "Sheet1 は見つかりませんでした"
    Else
        MsgBox "Sheet1 は見つかりました"
    End If
End Sub

この例では、Sheet1 がなかったとしても、Resume Next によって処理が止まりません。

そして、確認が終わったら On Error GoTo 0 で解除するので、その後の処理は通常どおり動きます。

よくある勘違い

On Error GoTo 0 の 0 は、「0番の行へ飛ぶ」という意味ではありません。

ここではただの数字ではなく、エラー処理をリセットするための特別な指定として使われています。

また、On Error GoTo 0 を入れたからといって、前に書いた処理が消えるわけでもありません。

あくまで、その時点で有効になっているエラー処理を解除するだけです。

実務でのコツ

実務では、On Error Resume Next をむやみに使わないことが大切です。

どうしても必要な場面だけ使って、使い終わったらすぐ On Error GoTo 0 で戻しましょう。

エラーを無視するコードは便利ですが、原因が見えにくくなることがあります。

だからこそ、GoTo 0 は「エラー処理を終える合図」として使うのがおすすめです。

まとめ

On Error GoTo 0 は、VBAのエラー処理を元に戻すための命令です。

On Error Resume Next とセットで使うことで、一時的なエラー回避と安全な解除をうまく両立できます。

ポイントはシンプルで、「無視したら、必ず戻す」 ことです。

この考え方を押さえておくと、VBAのエラー処理がぐっと書きやすくなります。

error: Content is protected !!
タイトルとURLをコピーしました