Sub TEST1()
'結果が見つからない場合はエラーとなる
Dim A
A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
End Sub
実行してみます。
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」を使えば、エラーを無視できます。
「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
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
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
Sub TEST7()
'エラーが発生したら「B:」に移動
On Error GoTo B
'エラーが発生するコード
Dim A
A = WorksheetFunction.VLookup(1, Range("A1"), 1, False)
B:
MsgBox "エラーが発生しました"
End Sub
Sub TEST8()
'エラーが発生したら「B」に移動
On Error GoTo B
Dim A
A = 1
B:
'これも実行されちゃう
MsgBox "エラーが発生しました"
End Sub
エラーが発生していないけど、メッセージが表示されちゃいます。
これは、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