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

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

第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については、
次回以降で詳細を説明します。

実行時エラー関連記事

実行時にトラップ可能なエラー番号一覧と対処
マクロ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 ・・・新着記事一覧を見る

トランザクション処理|SQL入門(12月11日)
インデックスを作成して高速化(CREATE INDEX)|SQL入門(12月9日)
他のテーブルのデータで追加/更新/削除|SQL入門(12月8日)
データの削除(DELETE)|SQL入門(12月7日)
データの更新(UPDATE)|SQL入門(12月6日)
複数のSELECT結果を統合(UNION,UNION ALL)|SQL入門(12月5日)
テーブルを結合して取得(INNER JOIN,OUTER JOIN)|SQL入門(12月4日)
データベースの正規化とマスタの作成|SQL入門(12月3日)
データベースにおけるNULLの扱い方|SQL入門(12月2日)
オブジェクト変数とは何か|VBA技術解説(12月2日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • エラー処理(On Error)

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


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



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