プログラム処理中に続行不能なエラーが発生しても、「実行時エラー」を回避するエラートラップ。
とても便利ですが、「続行させても本当に良いの?」という視点が大切です。
みなさん、こんにちは。セルネッツ竹本です。
今回は、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実務の効率化において、ご参考お役立てになれば幸いです。