このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】On Error GoTo/Resume Nextについて解説

2024年5月8日

今回はVBAのエラー処理について解説します。

VBAではOn Error GoToやOn Error Resume Nextを使用してエラー処理を行います。

基本的な使い方をサンプルコードとともに紹介するのでご覧ください。

また、エラー処理を解除する方法(On Error GoTo 0)についてもあわせて紹介します。

この記事では↓の内容が分かります。

  • On Error GoToでエラー処理部へ飛ばす
  • On Error Resume Nextでエラーを無視する
  • On Error GoTo 0でエラー処理を解除する

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

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 で割り算するかもしれないといったエラーを想定できる部分だけエラーを無視して、他はエラーで処理を止めるが基本です。

エラーをきちんとコントロールして誤動作しないプログラムを目指しましょう。

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

VBA

Posted by やろまい