VBAで自動化

【VBA】On Error Resume Nextでエラーを無視してエラーの制御

プログラムが実行中に発生したエラーや例外を検知し、適切な対処を行うためのプログラミング制御するため手法です。

プログラムの実行中に予期せぬ状況が発生した場合でも、プログラムがエラーで停止するのを回避して、エラーメッセージを表示せずにプログラムを継続することができます。

On Error Resume Nextステートメントの動作内容と使用上の注意点

On Error Resume Nextステートメントを使用すると、エラーが発生してもアラートなどを表示することなく無視して表示自体しません。そのため、次の行のプログラムが実行を中断されないことにメリットがあります。

このステートメントは、エラーが発生しない場合もエラーが発生している場合も、同じように処理が行われるので発生したエラー内容を確認できずにプログラムが継続実行されます。

デメリットとしては、不正確な結果をもたらす可能性があるため注意が必要です。

エラー無視を止めさせるOn Error GoTo 0ステートメントとは

エラーハンドリングをリセットするためのステートメントです。「On Error Resume Next」を使用してエラーハンドリングが有効な状態である間に「On Error GoTo 0」を使用すると、エラーハンドリングが無効になります。

エラーハンドリングが無効状態になるとエラーが発生した場合に通常のエラー処理が実行されます。
エラーが無視された状況では、問題が発生しているかどうか確認できないため、バグの原因となる可能性があります。ハンドルすることがプログラムの品質と信頼性を考えます。

動作確認のサンプルコード

Sub Example()
Dim result As Double

' エラーが発生する可能性のある操作
On Error Resume Next
result = 1 / 0 ' ゼロで割り算を試みる
On Error GoTo 0 ' エラーハンドリングを元に戻す

' エラーが発生してもプログラムが続行される
MsgBox "結果: " & result
End Sub

ゼロで割り算を試みてエラーが発生しますが、ステートメントによりエラーが発生してもプログラムが停止せずに続行されます。実行するとエラーメッセージが表示されず、その後のメッセージボックスには「結果: 1.#INF 」が表示されます。ずっとエラー表示がでないのは困ります。エラーがあった場合にはアラート表示がでるように「On Error Resume Next 0」を記載します。

エラーハンドリングの目的とは

  • エラーの特定と診断:プログラムの実行中に発生したエラーの種類と原因を特定し、詳細な情報を取得します。
  • エラーの通知:ユーザーや開発者にエラーが発生したことを通知するためのメッセージやログを生成します。
  • エラーの処理:エラーが発生した場合には、適切な対処方法を実行します。これには、エラーメッセージの表示、代替の処理、ログの記録などが含まれます。

エラーハンドリングの基本的な手法と構成要素

  • トラップ(Trap):エラーリングのために特定の箇所でエラーハンドを監視する仕組みを配置します。エラーが発生しそうな箇所でエラーをトラップするためのコードを配置します。
  • エラーの処理:エラーが発生した場合に実行する処理を定義します。エラーメッセージの表示、ログの記録、代替の処理などが含まれます。
  • エラーハンドリングの解除:エラー処理が不要な場合やエラーハンドリングの範囲を超えたい場合にエラーハンドリングを解除すること。

-VBAで自動化