VBA入門
第60回.エラー処理(On Error)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2020-07-13

第60回.エラー処理(On Error)


マクロを実行していると、エラーメッセージが表示されマクロ実行が停止してしまう事があります。
マクロがエラー停止しては自動化の目的が達成されませんので、エラー停止しないようにしなければなりません。


エラーが出ないようにVBAを記述出来ればそれに越したことはありませんが、一切エラーを出さないようにVBAを書くことはかなり困難なものです。
そして、エラーを回避する方法が存在しない場合もVBAにはありますし、エラーを上手く利用する事もVBAでは必須技術になります。

マクロVBAのエラー発生例

マクロVBA実行において、以下のようなメッセージが表示される事があります。


VBA マクロ エラー処理

表示されるメッセージ内容は、その時々で変わりますが、
まあ、大抵は意味不明な日本語ですね(笑)
これは、マクロの記述の中に、実行不能な事が書かれていて、エラーが発生しているのです。
しかし、時にはエラーが発生しても処理を続けたいとか、
エラー発生したら、それに対処する為の処理をしたいとか、
そのような事が必要な場合もVBAでは結構あるものです。

エラー処理のステートメント

エラーに対処するステートメントは以下の3つになります。
On Error GoTo 行ラベル
On Error Resume Next

On Error GoTo 0

On Error GoTo 行ラベル

 エラーが発生すると、行ラベルの位置に制御が移ります。

On Error Resume Next

エラーが発生しても、エラーが発生したステートメントの次のステートメントから実行を継続します。
オブジェクトを操作する場合は、On Error GoTo ステートメントではなく、このステートメントを使ってください。

On Error GoTo 0

現在のプロシージャに含まれる使用可能なエラー処理ルーチンを無効にします。
On Error GoTo 0 ステートメントを指定していない場合、プロシージャの終了時に自動的に無効になります。

On Error の有効範囲

On Error GoTo 行ラベル

On Error Resume Next
これらは、このステートメント以降、
On Error GoTo 0が出てくるか、プロシージャが終了するまでが有効範囲となります。


On Error GoTo 行ラベルOn Error Resume Nextについては、
次回以降で詳細を説明します。

実行時エラー関連記事

第61回.「On Error GoTo」と「Exit Sub」
「OnErrorGoTo行ラベル」このステートメントは、実行時エラーが発生した時に、制御を指定の行ラベルに移動させるものです。マクロVBAは、エラーが発生するとその時点で停止してしまいます。VBAが実行不能となった場合に、エラー発生したVBAコードで停止します。
第62回.「On Error Resume Next」とErrオブジェクト
「OnErrorResumeNext」ステートメントは、実行時エラーが発生してもマクロVBAを中断せずに、エラーが発生したステートメントの次のステートメントから実行を継続します。マクロVBAは、エラーが発生するとその時点で停止してしまいます。
第134回.Errオブジェクトとユーザー定義エラー
VBA実行時には種々のエラーが発生します。実行時エラーに関する情報は、Errオブジェクトには入っていますので、VBA実行でエラー発生した場合は、Errオブジェクトを参照しエラー内容を調べることになります。Errオブジェクトの使い方と、ユーザー定義エラーの生成方法について解説します。
実行時にトラップ可能なエラー番号一覧と対処
マクロVBA実行時に発生するエラーのエラー番号とエラーメッセージおよび簡単な理由と対策の一覧です。以下の表にあるエラーはトラップ(捕捉)できるエラー一覧になります。OnErrorステートメントおよびErrオブジェクトのNumberロパティを使用して、エラーへの対処を行うことができます。
よくあるVBA実行時エラーの解説と対応
VBAを書き終えて、いざ実行したら意味不明なメッセージが… ここでは初心者向けに、代表的な実行時エラーの解説とその対応について説明します。中級者以上の方は、実行時にトラップ可能なエラー番号一覧と対処 こちらを参考に、エラー対応(OnError等)を実装してください。



同じテーマ「マクロVBA入門」の記事

第57回.Applicationのプロパティ(マクロ高速化と警告停止等)
第58回.コレクションとは(Collection)
第59回.コレクション処理(For Each)
第60回.エラー処理(On Error)
第61回.「On Error GoTo」と「Exit Sub」
第62回.「On Error Resume Next」とErrオブジェクト
第63回.ブックを開く(Open,Add)
第64回.ブックを閉じる・保存(Close,Save,SaveAs)
第65回.シートの挿入、名前の変更(Add,Name)
第66回.シートのコピー・移動・削除(Copy,Move,Delete)
第67回.総合練習問題7


新着記事NEW ・・・新着記事一覧を見る

import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)
リスト内包表記|Python入門(9月22日)
Pythonの引数は参照渡しだが・・・|Python入門(9月21日)
lambda(ラムダ式、無名関数)と三項演算子|Python入門(9月20日)
関数内関数(関数のネスト)とスコープ|Python入門(9月18日)
関数の定義(def文)と引数|Python入門(9月18日)
組み込み関数一覧|Python入門(9月17日)
辞書(dict型)|Python入門(9月16日)
入力規則への貼り付けを禁止する|VBA技術解説(9月16日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ