マクロ内でエラーが発生する可能性がある部分にエラー処理を行います。処理には On Errorステートメントを使います。
エラー処理をしないと途中で停止していまいます。ユーザーが思いがけない値を入力してしまった場合など、例えば0以上の数値入力のところに0を入力されたり、数値入力のところ文字列を入力されたりなどです。
エラー処理には下記の種類があります。
- On Error Resume Next - エラーを無視し、次の行に移ります。
- On Error Resume Goto ラベル名 - エラーが発生すると、指定したラベルの行に移動します。
- On Error Resume Goto 0 - 上のエラー処理を無効にし、エラー処理がない状態に戻します。
マクロでのエラー処理
VBA入力画面
入力したコードです。
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マクロの実行結果
「エラーが発生しました。」のメッセージが表示されました。
■ MyErrorGoto2マクロの実行結果
「エラーが発生しました。 エラー番号:13 エラー内容:型が一致しません」のメッセージが表示されました。
Excelマクロのサンプルファイル:
フリーダウンロード
Copyright (C) excel.usefulhp.com All rights reserved.