MENU

【初心者向け】Excel VBAのエラー処理(On Error)の基本と実例を解説!

A子さん

「マクロを実行したらエラーで止まった…」
「“型が一致しません”とか“インデックスが有効ではありません”って出ても、どこを直せばいいのか分からないよ…」

先輩

そんな悩み、エラー処理を入れておけば落ち着いて対処できます!

結論:On Error を使えば、エラーが出てもマクロを止めずに処理を続けられる!

目次

On Errorとは?【基本構文】

VBAでは実行中にエラーが起きると、強制終了してしまうことがあります。
On Errorを使えば、そのエラーに対して柔軟に対応できます。

主な構文は次の2つです:

On Error Resume Next     ' エラーが起きても無視して次の行へ
On Error GoTo ラベル名   ' エラーが起きたら指定したラベルにジャンプ

On Error Resume Nextの使い方

On Error Resume Next

Dim result As Double
result = 10 / 0     ' ゼロ除算 → エラーだがスキップされる

MsgBox "処理が続行されました"
先輩

軽微なエラーを無視して処理を続けたい場合に便利です。

On Error GoToの使い方

On Error GoTo エラー処理

Dim result As Double
result = 10 / 0     ' ゼロ除算

MsgBox "この行は実行されません"
Exit Sub

エラー処理:
    MsgBox "エラーが発生しました"
先輩

エラー発生時に特定の処理へ飛ばしたい時に使います。

Errオブジェクトで詳細を確認する

On Error Resume Next

Dim num As Double
num = 1 / 0

If Err.Number <> 0 Then
    MsgBox "エラー番号:" & Err.Number & vbCrLf & "説明:" & Err.Description
    Err.Clear  ' エラー情報をクリア
End If
先輩

Err.NumberErr.Description を使えば、何のエラーか把握しやすくなります

実務でよく使うエラー処理パターン

ファイルが存在しない時の処理

Dim wb As Workbook
On Error Resume Next
Set wb = Workbooks.Open("C:\存在しないファイル.xlsx")

If wb Is Nothing Then
    MsgBox "ファイルが見つかりません"
End If
On Error GoTo 0

セルの値を数値変換して失敗する場合

Dim value As Double
On Error Resume Next
value = CDbl(Cells(1, 1).Value)

If Err.Number <> 0 Then
    MsgBox "数値に変換できませんでした"
    Err.Clear
End If

エラー処理を解除する:On Error GoTo 0

On Error Resume Next
' エラー処理を使う処理…

On Error GoTo 0  ' エラー処理を解除(以後は通常通り止まる)

エラー処理を使う時の注意点

注意点内容
エラーを無視しすぎないOn Error Resume Next を多用しすぎると、不具合の原因が分かりづらくなります
Err.Clear を忘れない連続した処理でエラー情報が残っていると、誤判定のもとになります
必ず On Error GoTo 0 で解除するエラー処理のスコープを明確にしましょう

まとめ

項目ポイント
On Error Resume Nextエラーを無視して処理を継続
On Error GoTo ラベルエラー時に特定の処理へ移動
Err.Number / Err.Descriptionエラーの内容を把握する
On Error GoTo 0エラー処理の解除
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次