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ライフが少しでも充実させるものになったのならば、管理人としては結構ハッピーです。

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




  • この記事を書いた人

Nakamura(nkmr)

NakamuraBlog(ナカログ)運営 [ 2.5万PV/月 ] │ブロガー│ 【経歴】IT会社に新卒入社 ▶︎ 通用しない ▶︎ プログラミングに出会う ▶︎ 年間1億円以上のコスト削減プログラムを開発 ▶︎ 会社賞受賞 ▶︎ 少しでも世の中の苦しんでる私と似た人に役に立てればと思いブログを開設。 ● 文系がプログラムと出会って会社員人生が変わった人。 ● 2020年より「嫁を置いて1人旅」の旅動画を投稿開始。

-ALL, Program, VBA
-, , ,