大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、エラー処理をする方法について、ご紹介します。エラーを無視する「On Error Resume Next」、エラーを判定する「Err.Number」、エラー無視を解除する「On Error Goto 0」、エラー発生時に特定行に移動「On Error Goto」という方法があります。

はじめに

この記事では、エラーを処理する方法について、ご紹介します。

エラー処理の方法として、次の方法があります。

  • エラーを無視する:「On Error Resume Next」
  • エラーの判定:「Err.Number」
  • エラー無視を解除:「On Error Goto 0」
  • エラーが発生したら移動:「On Error Goto」

という感じです。

「VLookup関数」のように、エラーに対して処理をする必要がある場合に使えます。

ただ、エラーが嫌だからエラーを無視して使う、というような使い方はやめた方がいいです。

うまくエラー処理をしてエラーに強くなっていきましょう。

では、エラーを処理する方法について、解説していきます。

この記事で紹介すること

  • エラー処理する方法

目次から見たい項目へ移動すると便利ですよ。

目次

エラー処理をする

エラー処理をしてみます。

「On Error Resume Next」でエラーを無視する

「On Error Resume Next」でエラーを無視することができます。

エラーが発生してしまう場合

VLookup関数を使った場合に、値が見つからないとエラーとなってしまします。

Sub TEST1()
    
    '結果が見つからない場合はエラーとなる
    Dim A
    A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
    
End Sub

実行してみます。

VLookup関数を使った場合に、値が見つからないとエラーとなってしまします
VLookup関数を使った場合に、値が見つからないとエラーとなってしまします

VLookup関数を使った場合に、値が見つからないとエラーとなってしましました。

こんな場合に、エラーの無視を使います。

「On Error Resume Next」でエラーを無視

「On Error Resume Next」を使えば、エラーを無視できます。

Sub TEST2()
    
    'エラーを無視する
    On Error Resume Next
    
    'エラーとなるコード
    Dim A
    A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
    
    MsgBox "実行されます"
    
End Sub

実行してみます。

「On Error Resume Next」を使えば、エラーを無視できます

エラーは出ないで、最後まで実行できました。

こんな感じで、「On Error Resume Next」を使えば、エラーを無視できます。

「Err.Number」でエラーが発生しているかを判定

「Err.Number」でエラーが発生しているかを判定できます。

Sub TEST3()
    
    'エラーを無視する
    On Error Resume Next
    
    'エラーとなるコード
    Dim A
    A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
    
    'エラーが発生している場合
    If Err.Number <> 0 Then
        MsgBox "エラーが発生しました"
    End If
    
End Sub

エラーが発生している場合に、メッセージを表示したりできます。

「Err.Number」でエラーを判定

エラーが発生している場合に、メッセージを表示できました

エラーが発生している場合に、メッセージを表示できました。

「On Error Goto 0」でエラーの無視を解除

「On Error Resume Next」でエラーの無視を解除した場合は、「On Error Goto 0」でエラーの無視を「解除」する必要があります。

「On Error Resume Next」だけを使った場合

「On Error Resume Next」だけを使った場合、出てほしいエラーも無視して、実行できちゃいます。

Sub TEST4()
    
    'エラーを無視する
    On Error Resume Next
    
    'エラーとなるコード
    Dim A
    A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
    
    Cells(0, 0) = 1 '←ここは、エラーを出したい
    
    MsgBox "実行しました"
    
End Sub

実行してみます。

出てほしいエラーも無視して、実行できちゃいます

出てほしいエラーも無視して、実行できちゃいました。

「On Error Goto 0」でエラーの無視を解除する

「On Error Goto 0」でエラーの無視を解除すると、出てきてほしいエラーを表示できます。

Sub TEST5()
    
    'エラーを無視する
    On Error Resume Next
    
    'エラーとなるコード
    Dim A
    A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
    
    'エラーの無視を解除
    On Error GoTo 0
    
    'エラーとなるコード
    Cells(0, 0) = 1
    
End Sub

実行してみます。

出てきてほしいエラーを表示できました
出てきてほしいエラーを表示できました

出てきてほしいエラーを表示できました。

まとめたVBAコード

以上のVBAコードをまとめてみます。

エラー処理をまとめた結果

「On Error Resume Next」と「Err.Number」、「On Error Goto 0」を組み合わせて、エラー処理ができます。

Sub TEST6()
    
    'エラーを無視する
    On Error Resume Next
    
    'エラーとなるコード
    Dim A
    A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
    
    'エラーの場合の表示を出す
    If Err.Number <> 0 Then
        MsgBox "エラーが発生しています"
    End If
    
    'エラーの無視を解除
    On Error GoTo 0
    
End Sub

実行してみます。

On Error Resume NextとErr.Number、On Error Goto 0を組み合わせて、エラー処理ができました

「On Error Resume Next」と「Err.Number」、「On Error Goto 0」を組み合わせて、エラー処理ができました。

エラーが発生したら特定行へ移動する

エラーが発生したら「特定行」へ移動することもできます。

「On Error Goto」を使う

「On Error Goto」を使って、エラーが発生した場合に、特定行へ移動してみます。

「On Error Goto」でエラー発生時に特定コードに移動

「On Error Goto」でエラー発生時に「B」に移動するVBAコードです。

Sub TEST7()
    
    'エラーが発生したら「B:」に移動
    On Error GoTo B
    
    'エラーが発生するコード
    Dim A
    A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
    
B:
    MsgBox "エラーが発生しました"
    
End Sub

エラーが発生したので、「On Error Goto」を使って、「B」に移動してメッセージを表示できます。

エラーが発生したので、「On Error Goto」を使って、「B」に移動してメッセージを表示できました

「B」に移動してメッセージを表示できました。

「B」への移動のイメージは、こんな感じです。

「B」への移動のイメージです

「On Error Goto」を使えば、エラー発生時に特定行への移動ができます。

「Exit Sub」もセットで使う

「On Error Goto」を使う場合は、「Exit Sub」もセットで使いましょう。

「エラー」が発生しない場合

「Exit Sub」を使わない場合、「エラー」が発生しない場合でも最後まで実行されてしまいます。

Sub TEST8()
    
    'エラーが発生したら「B」に移動
    On Error GoTo B
    
    Dim A
    A = 1
    
B:
    'これも実行されちゃう
    MsgBox "エラーが発生しました"
    
End Sub

エラーが発生していないけど、メッセージが表示されちゃいます。

エラーが発生していないけど、メッセージが表示されちゃいました

これは、VBAコードが最後まで実行されてしまったからです。

VBAコードが最後まで実行されてしまったからです

「Exit Sub」を使わないと、VBAコードが最後まで実行されてしまいます。

「Exit Sub」を使う

「Exit Sub」を使って、VBAコードを途中で終了させます。

Sub TEST9()
    
    'エラーが発生したら「B」に移動
    On Error GoTo B
    
    Dim A
    A = 1
    
    MsgBox "終了しました"
    
    'コードをここで終了させる
    Exit Sub
    
B:
    MsgBox "エラーが発生しました"
    
End Sub

エラーがなければ、通常通り終了できます。

エラーがなければ、通常通り終了できます

通常通り終了できました。

エラーが発生する場合は、「B」に移動します。

Sub TEST10()
    
    'エラーが発生したら「B」に移動
    On Error GoTo B
    
    'エラーとなるコード
    Dim A
    A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
    
    'コードをここで終了させる
    Exit Sub
    
B:
    MsgBox "エラーが発生しました"
    
End Sub

エラーが発生したので、「B」に移動してメッセージを表示できます。

エラーが発生したので、「B」に移動してメッセージを表示できました

「B」に移動してメッセージを表示できました。

こんな感じで、「On Error Goto」を使う場合は、「Exit Sub」もセットで使いましょう。

おわりに

この記事では、エラーを処理する方法について、ご紹介しました。

エラー処理の方法として、次の方法があります。

  • エラーを無視する:「On Error Resume Next」
  • エラーの判定:「Err.Number」
  • エラー無視を解除:「On Error Goto 0」
  • エラーが発生したら移動:「On Error Goto」

という感じです。

「VLookup関数」のように、エラーに対して処理をする必要がある場合に使えます。

ただ、エラーが嫌だからエラーを無視して使う、というような使い方はやめた方がいいです。

うまくエラー処理をしてエラーに強くなっていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す