【Excel VBA】エラーを無視して処理を続ける(On Error Resume Next)

はじめに

今回は、エラーを無視する方法について解説します。
ゼロ徐算など、場合によってエラーが発生してしまうリスクがある場合は、予めエラーを発生しない設定にしておいて、エラーが発生したかを別途判断したい場合もあるかと思います。
そういった場合にお役に立てると思いますので、ぜひ最後までお付き合いください!

この記事を読むメリット
  • エラーを無視する方法が分かります。
  • エラーハンドリングを再開させる方法も併せて紹介しています。
  • コピペで使える実践的なサンプルコードを掲載しています。

前提

本記事でご紹介する「エラーを無視する」とは、エラーメッセージが出力されないようにしたうえで、マクロの一時停止をしないようにすることを指します。

VBAで出力される エラーメッセージの例
りゅう

基本的には、エラーが発生しても、マクロを止めたくない場合に使用します。

めい

検知したいエラーが検知出来なくなるリスクもありますので、使用時にはご注意ください!

基本情報

On Error Resume Next ステートメント

エラーを無視する設定を有効にするには、On Error Resume Nextステートメントを使用します。
また、エラーハンドリングを再開するには、「On Error Goto 0」を使用します。

構文

‘ エラーを無視
On Error Resume Next

‘ 一つ前のシートを選択する
ActiveSheet.Previous.Select


‘ エラーハンドリングを再開
On Error Goto 0

りゅう

「ActiveSheet.Previous.Select」を実行する際、ActiveSheetが1つ目である場合にエラーが発生してしまいます。
「On Error Resume Next」を使用することで、エラーを無視して処理を続行することが可能です。

エラーが発生したかどうかの判定

On Error Resume Nextステートメントを実行した後に、エラーが発生したかどうかを確認するには、Errオブジェクトを参照します。

サンプルコード
Public Sub outputErrorMsg()

    ' エラー無視設定を有効化
    On Error Resume Next

    ' 1つ目のシートをActivate
    ThisWorkbook.Worksheets(1).Activate
    ' Activeシートの1つ前をSelect ※エラー発生
    ActiveSheet.Previous.Select

    If Err.Number <> 0 Then

        ' エラーが発生した場合はエラー内容を出力
        Debug.Print "エラー番号:" & Err.Number & vbCrLf & "エラー内容:" & Err.Description
    End If

    ' エラーハンドリングを再開
    On Error GoTo 0
End Sub
りゅう

Errオブジェクトは、「On Error GoTo 0」を実行するとクリアされてしまいますのでご注意ください!

サンプルコード

エラーを無視する(ゼロ徐算考慮)

以下のサンプルコードでは、Mainプロシージャに指定した値を割り算します。
ゼロで割り算をしてしまった場合にエラーとなってしまう為、0徐算が発生した場合は 0を返却します。

サンプルコード
Public Sub Main()
    Dim num1 As Double
    Dim num2 As Double
    Dim result As Double

    ' 割り算を実行 ※ゼロ徐算された場合は 0 を返却
    result = execDivide(100, 0)
End Sub

Private Function execDivide(ByVal num1 As Double, ByVal num2 As Double) As Double
    Dim result As Double

    ' エラー無視設定を有効化
    On Error Resume Next

    ' 割り算を実施
    result = num1 / num2

    If Err.Number <> 0 Then
        
        ' エラーが発生した場合は resultに0を代入
        result = 0
    End If

    ' 戻り値をセット
    execDivide = result

    ' エラーハンドリングを再開
    On Error GoTo 0
End Function

最後に

今回は、エラーを無視する方法について解説しました。
エラーは「とりあえず無視しておけばいいものではない」ので、取り扱いには十分ご注意ください。

本記事の内容は、当ブログの「シートの存在チェック」のサンプルコードでも使用していますので、興味があればご参照ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA