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のエラー処理がぐっと書きやすくなります。
