【VBA】On Error GoTo/Resume Nextについて解説
今回はVBAのエラー処理について解説します。
VBAではOn Error GoToやOn Error Resume Nextを使用してエラー処理を行います。
基本的な使い方をサンプルコードとともに紹介するのでご覧ください。
また、エラー処理を解除する方法(On Error GoTo 0)についてもあわせて紹介します。
この記事では↓の内容が分かります。
- On Error GoToでエラー処理部へ飛ばす
- On Error Resume Nextでエラーを無視する
- On Error GoTo 0でエラー処理を解除する
On Error GoToでエラー処理部へ飛ばす
Sub Sample1()
'エラーが発生したらErrTrapへジャンプ
On Error GoTo ErrTrap
Dim row_i As Long
For row_i = 1 To 5
'逆数を計算
Debug.Print 1 / Cells(row_i, 1)
Next
Exit Sub 'ここで終了しないとErrTrapの内容も処理してしまう
ErrTrap:
MsgBox "割り算ができません"
End Sub
サンプルコードでは「1÷セルの値」の計算を行って逆数を求めています。
この割り算ですが、例えばセルの値が0であったり、文字であったりするとエラーとなってしまいます。
このエラーに対応するため、On Error GoToを使用しています。
On Error GoToはエラーが発生したときに、処理をジャンプさせる指示です。
サンプルコードを実行してみると、0で割り算したときに「ErrTrap:」の位置へ処理がジャンプするのが分かりす。
このようにエラー時に強制終了させたいときなどは、On Error GoToを使用しましょう。
Exit Sub 'ここで終了しないとErrTrapの内容も処理してしまう
なお、「Exit Sub」を書き忘れると正常終了したときもErrTrapの内容を実行してしまうので、書き忘れには注意です。
On Error Resume Nextでエラーを無視する
Sub Sample2()
'エラーが発生しても無視して進める
On Error Resume Next
Dim row_i As Long
For row_i = 1 To 5
'逆数を計算
Debug.Print 1 / Cells(row_i, 1)
Next
End Sub
On Error Resume Nextはエラーが発生したときに、エラーを無視させる指示です。
サンプルコードを実行すると、0で割り算してもエラーを出さないで処理が進むのが分かります。
特別な処理をせず、エラーを無視するだけで済むときはOn Error Resume Nextを使いましょう。
On Error GoTo 0でエラー処理を解除する
Sub Sample3()
'エラーが発生しても無視して進める
On Error Resume Next
Dim row_i As Long
For row_i = 1 To 5
'逆数を計算
Debug.Print 1 / Cells(row_i, 1)
Next
On Error GoTo 0
'ここからはエラーが無視されない
End Sub
On Error Resume Nextを書くとエラーが無視されますが、プログラム全体でエラーを無視するのは危険です。
想定できるエラーは無視して、想定外のエラーは発生させて処理を止めるのが理想です。
そのため、On Errorを使うときはOn Error GoTo 0もセットで使いましょう。
On Error GoTo 0とすると、そこからはエラーを無視しなくなります。
0 で割り算するかもしれないといったエラーを想定できる部分だけエラーを無視して、他はエラーで処理を止めるが基本です。
エラーをきちんとコントロールして誤動作しないプログラムを目指しましょう。