第61回.「On Error GoTo」と「Exit Sub」
「On Error GoTo 行ラベル」
このステートメントは、実行時エラーが発生した時に制御を指定の行ラベルに移動させるものです。

このようなエラー発生時にも、マクロVBAが停止せずに指定の行ラベルの位置に移動し処理を継続したい場合に、
On Error Go To ステートメントを使用します。
On Error GoTo 行ラベル
これが実行された後にエラーが発生すると、行ラベルの位置に制御が移ります。
・プロシージャーの終了
On Errorが実行された時点で、それ以前のエラー情報は消去さます。
Sub Sample
On Error GoTo Label01
'・・・
'ここでエラー発生した場合はLabel01に移動
'・・・
On Error GoTo 0
'・・・
'ここでエラー発生した場合はVBA停止します
'・・・
Exit Sub
Label01:
エラー時の処理
End Sub
行ラベル
これが、行ラベルです。
ラベル名:
このようにラベル名の後ろに:(コロン)を付けて書きます。
ラベルの命名は通常の変数の命名規則に準じます。
行ラベルではなく、行番号(数字)を指定することもできますす。
On Error GoTo 10
'・・・
10:
このように数字の後ろに:(コロン)を付けて書きます。
行番号を使う事も出来ますが、現代においては使わない方が良いでしょう。
Exit Sub
つまり、Subプロシージャーが終了します。
エラー処理ルーチンの直前でSubプロシージャーを抜けるためには、Exit Subを使用します。
If 終了条件 Then
Exit Sub
End If
このように、ある条件の時に、
それ以降の処理をせずに、プロシージャーを抜ける為に使用します。
On Error の有効範囲とその動作について
Sub sample1()
On Error GoTo Label01
Call sample2
Call sample3
Exit Sub
Label01:
MsgBox "Label01"
End Sub
Sub sample2()
On Error GoTo Label02
Dim i As Long
i = "abc"
On Error GoTo 0
Exit Sub
Label02:
MsgBox "Label02"
End Sub
Sub sample3()
Dim i As Long
i = "abc"
Exit Sub
Label03:
MsgBox "Label03"
End Sub
sample02には、On Error GoTo Label02、があるのでエラー発生時はLabel02に移ります。
sample03には、On Error がないので、エラー発生した時点でプロシージャーを抜けます。
「Label02」→「Label01」の順でメッセージ表示されます。
・呼び出し元にOn Error が無い場合はエラー停止します。
・呼び出し元にOn Error がある場合はその時点でプロシージャーを抜けます。
呼び出し元のさらに呼び出し元(親の親)も含まれます。
エラー処理を理解することはとても重要です。
ステップイン実行(F8) で、その動作を確認することが理解する一番の近道になるでしょう。
最後に
もちろん、エラー発生しないようにVBAを書くべきではありますが、
エクセルVBAでは、避けようのないエラー(でしか判定できないような場合)も存在します。
次回のOn Error Resume Nextと合わせてしっかりと習得してください。
同じテーマ「マクロVBA入門」の記事
第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
第68回.シートの保護、ブックの保護(Protect)
新着記事NEW ・・・新着記事一覧を見る
第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方
|生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する!
|生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。