ALL Program VBA

【解説付】VBA-On Error Resume Next/On Error GoTo の使い方【EXCEL】

本記事の信頼性

Nakamura(@nkmr_dai

本記事で分かること

本記事では、以下のことが分かります。

ポイント

EXCEL-VBAのエラー回避が出来るOn Error Resume Next と On Error Goto を理解することができる

 

エラー回避とは?

プログラムを作成するとどうしてもエラーが発生します

理由は様々ですが、
VBA作成者のPC環境と利用者のPC環境が相違しているケース」や
OSやEXCEL自体のバージョン更新されたケース」が
主な理由だと思います。

本来であれば、様々なユースケースを想定してプログラムを構築していく必要があるのですが、
時間が無い時コーディングを始めて初めの頃はそうもいきません。

そのような場合、エラー回避をする構文を利用すると
エラーを検知した時にスキップしたり、エラー時の動作を設定出来たりが出来ます。

エラー回避する構文は2つあります。

エラー回避構文-2つ-

①On Error Resume Next
②On Error GoTo 

 

On Error Resume Next でエラー回避

On Error Resume Nextどんなエラーが発生してもスキップするとても危険なコードです。
本来は修正すべきコードでさえも無視して処理を再開していきます。
エラー理由が分かっている場合にのみ使用しましょう。

注意ポイント

On Error Resume Nextが解除されるまで、
Sub ~ End Subすべての範囲でエラーがスキップされます
※解除方法は同ページの「エラールーチンを解除する方法」を参照ください。

<ソースコード>

On Error GoTo エラー時の動作 でエラー回避

On Error GoTo は、エラー時指定の動作を作動させる エラー構文です。

例えば、エラー発生時にMsgboxで
「エラー発生。VBA作成者に連絡して下さい。」と表示させてからVBAを終了させることができます。

尚、「エラー時の動作」はExit Sub~End Subの間に記載するルールがあるため、ご注意ください。
(On Error GoTo でとんだエラー時の動作後は、End Subへ行き VBAが終了します。)

この辺は分かりにくいと思いますので、↓の方に図解でも説明していますのでご覧になって下さい。

<ソースコード>

On Error GoTo - 処理を再開させる方法

On Error GoTo でとんだエラー時の動作後は、
基本的には End Subへ行き VBAが終了します。

しかし、
エラー検知したコードを再実行したい場合」や、
エラー検知した次のコードから再開したい場合」があります。

その場合は、
Resume もしくは Resume Next を利用すれば解決できます。

On Error GoTo - エラー検知したコードを再実行したい場合 (Resumeを使用)

エラー検知したコードを再実行したい場合、Resume を使用します。

ResumeにNextを使用しないことで「次へ」が欠落し、
エラーしたコードをひたすらResume(~処理再開)を繰り返します。

<コーディングのイメージ>

On Error GoTo - エラー検知した次のコードから再開したい場合(Resume Nextを使用) 

エラー検知した次のコードから再開したい場合、Resume Next を使用します。

Resume Next により「次のコードから再開」という意味となります。

<コーディングのイメージ>

エラールーチンを解除する方法

あるときはエラーを無視したい。
あるときはエラーを検知したい。
こんな時は、On Error GoTo 0 を使用します。

On Error GoTo 0 はエラールーチンを解除するコードです。

例えば、任意のコードを
On Error Resume NextOn Error GoTo 0サンドイッチすれば、
サンドイッチした範囲のエラー無視が可能です。
  ※On Error Goto と On Error Goto 0 でサンドイッチしても同様。

On Error Resume Next を解除する時

<コーディングのイメージ>

On Erro GoTo を解除する時

エラー回避コード使用時の注意点

繰り返しになりますが、
On Error Resume Nextどんなエラーが発生してもスキップするとても危険なコードです。
本来は修正すべきコードでさえも無視して処理を再開していきます。
エラー理由が分かっている場合にのみ使用しましょう。

編集後記

いかがでしたでしょうか。

エラー回避コードは動作実行を優先させたい場合に有益なコードである反面、
本来は解決すべきだったコーディング内容を無視する危険なコードでもあります。

使用する際は十分に注意してご利用下さい。

ちょっとだけ宣伝

こちらは宣伝になりますが、
もしVBA全般のルール・基本知識を身に付けたい方がいらっしゃいましたら、
本ブログでは「1週間で分かるVBA 」 なる記事もご紹介していますので、
一度 覗いてみてくれると幸いです。(当然、無料です。)


本ブログ記事をご覧いただいた皆様のVBAライフが少しでも充実させるものになったのならば、管理人としては結構ハッピーです。

末筆ながら 今後ともどうぞよろしくお願いいたします。




-ALL, Program, VBA
-, , ,