マクロ内でエラーが発生する可能性がある部分にエラー処理を行います。処理には On Errorステートメントを使います。

エラー処理をしないと途中で停止していまいます。ユーザーが思いがけない値を入力してしまった場合など、例えば0以上の数値入力のところに0を入力されたり、数値入力のところ文字列を入力されたりなどです。

エラー処理には下記の種類があります。

マクロでのエラー処理

VBA入力画面
On Errorプログラム画面

入力したコードです。

Sub MyError()
    Dim ln As Long
    
    ln = "エクセル エラー処理"
End Sub

Sub MyErrorResume()
    Dim ln As Long
    
    On Error Resume Next
    ln = "エクセル エラー処理"
End Sub

Sub MyErrorGoto1()
    Dim ln As Long
    
    On Error GoTo エラー処理
    ln = "エクセル エラー処理"
    Exit Sub

エラー処理:
    MsgBox "エラーが発生しました。"
End Sub

Sub MyErrorGoto2()
    Dim ln As Long
    
    On Error GoTo エラー処理
    ln = "エクセル エラー処理"
    Exit Sub

エラー処理:
    MsgBox "エラーが発生しました。" & vbCrLf & _
        "エラー番号 : " & Err.Number & vbCrLf & _
        "エラー内容 : " & Err.Description
End Sub

プログラムの説明


Subプロシージャの宣言
Sub MyError()
長整数型の変数を宣言
Dim ln As Long
長整数型の変数に文字列を代入
ln = "エクセル エラー処理"
プロシージャの終了
End Sub

Subプロシージャの宣言
Sub MyErrorResume()
長整数型の変数を宣言
Dim ln As Long
エラーを無視するエラー処理
On Error Resume Next
長整数型の変数に文字列を代入
ln = "エクセル エラー処理"
プロシージャの終了
End Sub

Subプロシージャの宣言
Sub MyErrorGoto1()
長整数型の変数を宣言
Dim ln As Long
エラーが発生した場合エラー処理ラベルに移動
On Error GoTo エラー処理
長整数型の変数に文字列を代入
ln = "エクセル エラー処理"
プロシージャの終了
Exit Sub
エラー処理ラベル
エラー処理:
エラーメッセージを表示
MsgBox "エラーが発生しました。"
プロシージャの終了
End Sub

Subプロシージャの宣言
Sub MyErrorGoto2()
長整数型の変数を宣言
Dim ln As Long
エラーが発生した場合エラー処理ラベルに移動
On Error GoTo エラー処理
長整数型の変数に文字列を代入
ln = "エクセル エラー処理"
プロシージャの終了
Exit Sub
エラー処理ラベル
エラー処理:
エラーメッセージ、エラー番号、エラー内容を表示
MsgBox "エラーが発生しました。" & vbCrLf & _
"エラー番号 : " & Err.Number & vbCrLf & _
"エラー内容 : " & Err.Description
プロシージャの終了
End Sub

エラー処理の実行画面

4種のマクロを実行します。
マクロ実行ダイアログボックス

■ MyErrorマクロの実行結果
マクロが途中停止し「実行時エラー’13’ 型が一致しません。」と表示されます。「終了」ボタンを押すとエラー発生行で停止します。「デバッグ」ボタンを押すとVBE画面に移動し、エラー行が反転表示されます。
エラーダイアログボックス

「デバッグ」ボタンを押した結果です。エラー行が反転表示されています。
エラーで停止した画面

■ MyErrorGoto1マクロの実行結果
「エラーが発生しました。」のメッセージが表示されました。
On Error Gotoの結果

■ MyErrorGoto2マクロの実行結果
「エラーが発生しました。 エラー番号:13 エラー内容:型が一致しません」のメッセージが表示されました。
On Error Gotoの結果

Excelマクロのサンプルファイル:フリーダウンロード








Copyright (C) excel.usefulhp.com All rights reserved.