【VBA入門】エラートラップ On Error Resume Next 便利だけど十分注意

プログラム処理中に続行不能なエラーが発生しても、「実行時エラー」を回避するエラートラップ。


プログラム処理中に続行不能なエラーが発生しても、「実行時エラー」を回避するエラートラップ。

とても便利ですが、「続行させても本当に良いの?」という視点が大切です。

みなさん、こんにちは。セルネッツ竹本です。


今回は、VBAエラートラップのひとつでもある「On Error Resume Next」をテーマに、メリットとデメリットについて解説します。

◆VBAエラートラップの種類と使い方

実行時エラーの箇所は、数量✕売価 のステートメントです。

文字列を演算できずエラー発生


よく使う3種類のトラップです。

1.On Error GoTo L_OpenErr:

          記述した位置以降に有効で、実行時エラー発生時に、指定のラベルへジャンプ

          ラベルと1セットで使います。

          飛び先では、通常、エラー情報を通知し、続行や停止など応答を待つことができます。

2.On Error GoTo 0

          プロシージャ内で発動したエラートラップが解除(無効)になります。

          警告メッセージのあと、次の処理を続けることができます。

3.On Error Resume Next
          エラーがあっても無視して、次の処理へ進みます

          【メリット】大量レコード処理中に何度も応答を求められたら不都合なとき便利

          【デメリット】無視して続行なので、重大なエラーを見逃す危険がある


冒頭キャプチャ図では、致命的な結果をもたらすため、本来、認識すべきことですが、スルーされるため、「重大なデータ不備に気づかない」リスクを抱えてしまいます。

「気づく仕組み」対策として、完了後にメッセージを表示する方法が行われます。

1.エラー発生回数をカウントしておき、件数をレポート
2.処理したレコード数、処理できなかったレコード数をレポート【内訳レポート
3.実測秒数をレポート(VBAはPCスペックで速度がかわるため)

やはり基本は、データ不備の傾向が見えてくるまでは、「実行時エラーはあえて落とす」ことが安全です。

例題の実行時エラーの原因は、売価が文字列だったために、演算できなかったことです。

そのため合計金額も少なくなり、少額の場合は、気付けないため注意が必要です。

◆Resume Next はこんな時に使いましょう

たとえば、シート内に存在しないはずの図形Objectがあるかもしれない場合、無条件に図形一括削除をします。が、あれば消しますが、無いと実行時エラーが発生するケースです。

この場合は、Resume Next が役立ちます。

大切なことは、実行時エラーが発生しないことが、良いプログラムではなく、実行時エラーが発生した場合、原因の箇所が速やかに特定できること。

そのためには、VBAソースの開示は大前提となります。

Lockをかけた場合、システム情報が表示されますが、ほとんど解決に役立ちませんので、原因と対処方法を警告すると良いでしょう。

今回のテーマは、「On Error Resume Next」について、解説を行いました。

本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。




全国対応!お気軽にお問い合わせください