【2026年8月最新】VBAのGoTo文とは?ラベル・ループ制御・エラー処理(On Error GoTo)の使い方
この記事の内容
「業務マクロを実行したら、途中で謎のエラーが出て処理が止まってしまった」「担当者がいないときにマクロがエラーで止まり、誰も対処できなかった」——ExcelVBAで作られた業務マクロを運用していると、こうした場面に一度は遭遇するはずです。
こうした「異常事態への備え」を実装するための仕組みが、この記事のテーマであるGoTo文と、それを使ったOn Error GoToによるエラー処理です。処理を強制的に別の場所へジャンプさせるGoTo文は、ループ制御やエラー処理など、さまざまな場面で活用されます。
この記事では、GoTo文の基本的な使い方から、ラベルへのジャンプ、On Error GoToによるエラー処理、そして非エンジニアの経営者・管理職の方に本当に知ってほしい「なぜ業務マクロのエラー処理が軽視されると危険なのか」まで、実務目線で解説します。
この記事を最後まで読むと、次の6つが明確になります。
01 BASIC CONCEPT GoTo文とは何か——処理を強制的にジャンプさせる仕組み プログラムの実行順序を変える最も原始的な命令
GoTo文とは、プログラムの実行位置を、通常の上から下への流れとは関係なく、指定した場所へ強制的にジャンプさせる命令です。「Go(行け) To(〜へ)」という名前の通り、コードの特定の地点へ処理を飛ばします。
📚 用語解説
ステートメント:VBAにおける「命令文」のこと。GoToやIf、Forなど、プログラムに何らかの動作を指示する1つ1つの文をステートメントと呼びます。
ジャンプ先の指定にはラベルという目印を使います。以下は、ある条件を満たした場合に処理をスキップする、最も基本的な使用例です。
Sub CheckScore()
Dim score As Integer
score = 45
If score < 60 Then
GoTo Fail
End If
MsgBox "合格です"
Exit Sub
Fail:
MsgBox "不合格です"
End Sub
この例では、scoreが60未満のとき、GoTo Failによって処理がFail:というラベルの位置まで一気に飛びます。Exit Sub(プロシージャを途中で終了する命令)と組み合わせることで、条件によって異なる結果を表示する、というシンプルな分岐が実現できます。
1-1. GoTo文が使われる3つの代表的な場面
GoTo文は「もしものときの避難経路をコードに用意しておく仕組み」だとイメージしてください。特にエラー処理での活用は、マクロが予期せぬ事態に遭遇したときに、業務を止めずに済ませるための重要な備えになります。
1-2. 具体的なイメージ:経費精算チェックを例に
もう少し具体的なイメージを持つために、「経費精算の申請金額をチェックするマクロ」を例に考えてみます。申請金額が上限(例えば5万円)を超えている場合は「要承認」、それ以外は「自動承認」というシンプルな業務ルールがあるとします。
GoTo文を使えば、「上限を超えていたら要承認の処理へジャンプし、それ以外はそのまま自動承認の処理を続ける」という分岐を、シンプルな構造で表現できます。もちろんIf〜Else文でも同じ結果を実現できますが、「複数の判定を経て、最終的に決まった処理へ合流させたい」というような複雑な分岐では、GoToによるジャンプの方が処理の見通しが良くなる場合もあります。
02 LABEL JUMP ラベルへジャンプする基本の使い方 ループのスキップにも活用できる柔軟な制御
GoTo文をより実践的に使う例として、ループ処理の中で特定の条件のときだけ処理をスキップするパターンを見てみます。
📚 用語解説
ラベル:GoTo文のジャンプ先を示す「目印」のこと。任意の名前の末尾にコロン(:)を付けて記述します(例: Fail:)。ラベルは、そのラベルを使うGoTo文と同じプロシージャ内に置く必要があり、別のプロシージャのラベルへジャンプすることはできません。
Sub SkipNegative()
Dim i As Integer
Dim nums(1 To 5) As Integer
nums(1) = 3: nums(2) = -1: nums(3) = 7: nums(4) = -5: nums(5) = 2
For i = 1 To 5
If nums(i) < 0 Then GoTo NextLoop
Debug.Print nums(i) & " は正の数です"
NextLoop:
Next i
End Sub
この例では、配列の中に負の数があった場合、GoTo NextLoopによってその回の処理だけをスキップし、次のループへ進みます。なお、同じ目的を達成する方法として、VBAにはForループ専用のContinueに相当する命令が用意されていないため、伝統的にこのGoToを使ったスキップ手法が使われてきました。
2-1. GoTo文の制約:スコープをまたいだジャンプはできない
GoTo文には重要な制約があります。それは、ジャンプ先のラベルは、必ず同じプロシージャの中に存在しなければならないという点です。別のSubプロシージャや、別のモジュールにあるラベルへ直接ジャンプすることはできません。この制約があるおかげで、GoTo文の影響範囲は「そのプロシージャの中だけ」に限定されます。
上から下へ
順番に実行
GoToで
ジャンプするか判断
指定した位置まで
強制的に移動
ジャンプ先から
処理を再開
2-2. ループを完全に抜けたい場合はExit For / Exit Doを使う
先ほどの例は「その回だけスキップして次へ進む」処理でしたが、これとは別に「条件を満たした時点でループ自体を完全に終了したい」という場面もあります。この場合はGoToではなく、Exit For(Forループ用)やExit Do(Do〜Loop用)という専用の命令を使うのが標準的な書き方です。
Sub FindFirstOver100()
Dim i As Integer
Dim nums(1 To 5) As Integer
nums(1) = 30: nums(2) = 80: nums(3) = 150: nums(4) = 60: nums(5) = 200
For i = 1 To 5
If nums(i) > 100 Then
MsgBox nums(i) & " が最初に100を超えました"
Exit For ' ループ自体をここで完全に終了する
End If
Next i
End Sub
「その回だけスキップして次へ進みたい」ならGoToによるジャンプ、「ループ自体を完全に抜けたい」ならExit For / Exit Do、という使い分けを覚えておくと、それぞれの場面でより読みやすいコードが書けます。
03 ERROR HANDLING On Error GoToによるエラー処理の基本 実行時エラーが起きたときの「避難経路」を用意する
GoTo文の中でも特に実務上の価値が高いのが、On Error GoToを使ったエラー処理です。マクロの実行中に何らかのエラー(0での割り算、存在しないシートの参照など)が発生したとき、通常であればVBAは実行時エラーのダイアログを表示してマクロを停止します。On Error GoToを使うと、エラー発生時に指定したラベルへジャンプさせ、独自のエラー対応処理を実行できます。
📚 用語解説
実行時エラー:プログラムの実行中に発生するエラーのこと。文法上は正しいコードでも、「存在しないファイルを開こうとした」「0で割り算をしようとした」など、実行してみて初めて発覚する種類の問題を指します。VBAでは既定でエラーダイアログが表示され、処理が中断されます。
Sub SafeDivide()
On Error GoTo ErrorHandler
Dim result As Double
result = 10 / 0 ' 意図的にエラーを発生させる例
MsgBox "計算結果: " & result
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
On Error GoTo ErrorHandlerを実行しておくと、以降の処理でエラーが発生した瞬間にErrorHandler:ラベルへジャンプします。Errというオブジェクトを使うと、発生したエラーの内容(Err.Description)や番号(Err.Number)を取得でき、状況に応じたメッセージを表示することができます。
📚 用語解説
Errオブジェクト:VBAが実行時エラーの情報を自動的に格納しておく特別な入れ物。Err.Numberでエラー番号、Err.Descriptionでエラーの内容説明を取得できます。エラー処理の中でこの情報を使うことで、「何が原因で失敗したのか」を担当者に分かりやすく伝えることができます。
3-1. On Error GoTo 0:エラー処理を無効化する
On Error GoTo 0という特殊な書き方は、それまで設定していたエラー処理を無効化し、通常の(VBAの標準的な)エラーダイアログ表示に戻す命令です。特定の処理ブロックだけエラー処理を有効にし、その後は通常の動作に戻したい場合に使われます。
3-2. On Error Resume Next:エラーを無視して次へ進む
もう一つよく使われるのがOn Error Resume Nextです。これはラベルへのジャンプではなく、エラーが発生しても処理を止めず、次の行から実行を継続するという指定です。「ファイルが存在するかどうかを確認したいだけで、なければないで処理を続けたい」といった場面で使われます。
On Error Resume Nextは便利な反面、それ以降に発生したすべてのエラーを無言で無視してしまいます。想定していない箇所のエラーまで握りつぶしてしまい、不具合の原因究明を困難にすることがあるため、有効にする範囲を最小限に絞り、使い終わったら速やかに元の状態に戻すことが推奨されます。
3-3. 実務でよくあるエラー処理の型
業務マクロで実際によく使われるエラー処理には、いくつかの定番パターンがあります。
これらのパターンをあらかじめ洗い出し、それぞれに対応するエラー処理を実装しておくことで、「想定外の事態でマクロが完全に止まってしまう」リスクを大きく減らすことができます。
04 WHY CONTROVERSIAL なぜ「GoToの多用」は長年問題視されてきたのか プログラミングの歴史に残る議論を知っておく
GoTo文は、実はプログラミングの世界で長年「多用すべきでない」と言われ続けてきた、やや特殊な立ち位置の命令です。ここでは、非エンジニアの方にも知っておいてほしい背景を紹介します。
GoTo文をコードのあちこちで使いすぎると、処理の流れが複雑に入り組み、コードを読んでも「次にどこへ進むのか」が追いにくくなるという問題が起こります。この状態は、糸が複雑に絡み合った様子になぞらえて「スパゲッティコード」と呼ばれます。この問題提起は古くからプログラミングの世界で広く議論されてきた、著名な論点の一つです。
📚 用語解説
スパゲッティコード:処理の流れが複雑に入り組み、どこからどこへ実行が移るのかを追いにくくなったコードを指す俗称。GoTo文の多用が典型的な原因の一つとされ、修正・保守が困難になりやすいという特徴があります。
| 書き方 | メリット | デメリット |
|---|---|---|
| GoTo文を多用する | 条件分岐を素早く書ける、局所的には直感的 | 処理の流れが追いにくくなり、規模が大きくなるほど保守が困難に |
| If / For / Do While等で構造化する | 処理の流れが上から下へ追いやすい、保守しやすい | GoToに比べて書き方にやや慣れが必要な場合がある |
4-1. 現在の実務での位置づけ:「エラー処理」は例外的に許容される
こうした背景から、現在の実務では「条件分岐やループのスキップにGoToを多用するのは避け、代わりにIf文やFor文で構造化する」のが基本方針とされています。ただし例外があり、On Error GoToによるエラー処理は、GoTo文の数少ない「実務上ほぼ必須」とされる用途です。VBAには、他の多くの現代的な言語にあるようなtry-catch形式のエラー処理構文がないため、エラー処理を書く手段としてOn Error GoToが標準的に使われ続けています。
「条件分岐・ループ制御」ではGoToを避け、If/For/Do等で書く。「エラー処理」ではOn Error GoToを積極的に使う。この使い分けが、現在のVBA実務における標準的な考え方です。
05 RISK IN PRACTICE 【独自】業務マクロの「エラー処理の甘さ」が引き起こすトラブル 「動いているうちは気づかない」リスクの正体
ここからは、この記事の独自セクションです。エラー処理は、正常に動いている間はその重要性に気づきにくい仕組みです。しかし、いざエラーが起きたときの備えの有無が、業務への影響度を大きく左右します。
5-1. 担当者不在時に「誰も対処できない」エラー停止
エラー処理が実装されていないマクロは、実行時エラーが起きた瞬間に、VBAの標準エラーダイアログが表示されたまま停止します。作成した担当者であればダイアログの内容から原因を推測できるかもしれませんが、担当者が不在のときに他の社員がこのダイアログに遭遇すると、何もできずに立ち往生してしまうケースが頻発します。
5-2. エラーの「握りつぶし」による問題の発見遅れ
先述のOn Error Resume Nextを安易に使い、エラーメッセージも何も表示しないまま処理を継続させてしまうマクロも少なくありません。この場合、実際にはエラーが発生していたにもかかわらず、誰にも気づかれないまま処理が「成功したかのように」進んでしまうという、より深刻な問題につながります。
5-3. 部分的に処理された中途半端なデータの発生
例えば100件のデータを順番に処理するマクロが、50件目でエラーにより停止した場合、「50件は処理済み、残り50件は未処理」という中途半端な状態がシステムやファイルに残ります。この状態に気づかず追加の処理を実行すると、二重処理や集計のズレにつながることがあります。
対応策が
用意されていない
想定外の
データ・状況に遭遇
担当者不在だと
誰も対処できない
中途半端なデータ・
締め作業の遅延等
本記事の事例は一般的に起こりうるパターンの説明であり、特定の企業事例を示すものではありません。マクロの規模・運用体制によって発生条件や影響度は異なります。
5-4. エラー処理を「後回し」にするコストの差
エラー処理は、マクロ作成時に組み込んでおくコストと、後から追加するコストとで、必要な工数が大きく異なります。以下は、説明のための概算イメージです。
| タイミング | 主な作業内容 | 影響範囲(概算イメージ) |
|---|---|---|
| 作成時(想定されるエラーを洗い出す) | On Error GoToの組み込みのみ | 数十分程度 |
| 運用開始後(エラーで一度止まった後) | 原因調査+エラー処理の追加実装 | 数時間程度 |
| エラーが握りつぶされ問題が発覚した後 | データ検証・訂正・関係者への説明 | 数日規模になることもある |
この表からも分かる通り、「作成時にエラー処理を組み込んでおく」という一手間は、後々の業務停止や説明対応を防ぐための、極めて費用対効果の高い投資だと言えます。
06 GENAI CASE 【独自データ】GENAI実運用:AIによるエラー処理のレビュー・改善 Claude Codeが業務マクロの安全性向上をどう支援しているか
弊社(株式会社GENAI)では、Claude Max 20xプラン(月額$200・約30,000円)を契約し、営業・広告運用・記事制作・経理・秘書業務まで社内のあらゆる業務でClaude Codeを活用しています。この中には、既存のExcelマクロのエラー処理レビュー・改善業務も含まれます。
| 項目 | 内容 |
|---|---|
| 契約プラン | Claude Max 20x(月$200 / 約30,000円) |
| 利用開始 | 2025年後半〜 |
| 対象業務 | 既存VBAマクロのエラー処理点検・改修、WordPress/LP制作、スクリプト書き捨てなど開発全般 |
弊社の実運用の肌感としては、既存マクロに対して「このマクロにエラー処理が入っていない箇所を教えて」「想定されるエラーのパターンを洗い出して」とAIに依頼するだけで、人力では見落としがちな箇所も含めて点検してもらえる点が、大きな効率化につながっています。
これらは弊社の肌感・概算に基づくものであり、業種・業態・マクロの規模によって効果は変動します。「業界平均」ではなく、あくまで弊社1社の実運用データとしてご参照ください。
6-3. すべてのマクロを一度に見直すのではなく、影響度の高いものから
弊社がAIとの協働でエラー処理の改善を進める際も、「社内のすべてのマクロを一斉に点検する」ことは狙いません。最初は、業務影響の大きいマクロ(締め処理・請求書発行など、止まると業務全体に波及するもの)を1つ選んで、AIによるエラー処理の点検から着手します。
この進め方であれば、限られた工数の中でも、業務影響の大きい箇所から確実に安全性を高めていくことができます。
07 HOW TO INSTRUCT AI 非エンジニアがAIにエラー処理を任せる3つのコツ VBAを書けなくても、正しく要件を伝えれば十分に使いこなせる
On Error GoToのコードを自分で書けるようになる必要はありません。重要なのは、「どんな異常事態が起こりうるか」「そのとき何をしてほしいか」を具体的に言語化する力です。ここでは非エンジニアでも実践できる3つのコツを紹介します。
7-1. 【コツ1】「起こりうる異常事態」を業務目線で洗い出す
「エラー処理を入れて」という指示だけでは、AIはどんな異常事態を想定すべきか判断できません。「対象のファイルが見つからない場合」「入力必須の欄が空欄のまま実行された場合」「金額がマイナスになっている場合」のように、業務上起こりうる異常パターンを具体的に伝えることで、実用的なエラー処理が実装されます。
7-2. 【コツ2】エラー発生時に「誰が何をすべきか」を明確にする
エラーが発生したとき、単に「エラーが起きました」と表示するだけでは、担当者不在時に対処できません。「エラー内容を分かりやすく表示したうえで、処理を中断する」のか「軽微なエラーなら記録だけして処理を続ける」のか、エラーの重大度に応じた対応方針を伝えておくと、より実用的な実装になります。
7-3. 【コツ3】実装後、意図的にエラーを発生させて動作確認する
AIが実装したエラー処理も、実際にエラーを発生させてみて、意図通りに動くかを確認する工程が欠かせません。「わざと存在しないファイル名を指定してみる」「わざと空欄のまま実行してみる」といった形で、テスト用データを使って動作確認することを推奨します。
エラー処理のコードは、正常系のテストだけでは不具合に気づけません。意図的に異常な状況を作り出し、想定通りにエラー処理が働くかを確認する工程を、実装後に必ず設けてください。
08 CONCLUSION まとめ ── 「異常時の備え」が業務マクロの信頼性を決める GoTo文とエラー処理の理解は、業務マクロを長く安心して使う土台になる
この記事では、VBAのGoTo文の基本から、ラベルへのジャンプ、On Error GoToによるエラー処理、GoToの多用が問題視されてきた背景、そして「なぜ業務マクロのエラー処理の甘さが危険なのか」という実務目線での重要性までを解説しました。最後にポイントを振り返ります。
GoTo文というキーワードを覚えることが目的ではありません。この記事で本当にお伝えしたかったのは、「正常に動くこと」だけでなく「異常事態にどう備えるか」を最初から設計に組み込んでおくことが、業務マクロを長く安心して使い続けるための鍵になるという発想です。この発想さえ持てれば、コードが書けなくても、AIに的確な指示を出せるようになります。
特に、担当者が不在のときでもマクロが安全に停止し、状況が分かるメッセージを残してくれるかどうかは、業務の継続性を大きく左右します。「動いているから大丈夫」ではなく、「止まったときにどうなるか」まで想定しておくことが、業務マクロと長く付き合っていくための現実的な備えです。
業務マクロのエラー処理点検・安全性向上を、AI鬼管理が一緒に進めます
エラー処理の見直しのような細かい作業から、マクロ全体の安全性の底上げまで。
弊社の実運用ノウハウをベースに、個別に導入設計のご相談を承ります。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. GoTo文は今のプログラミングでは使うべきではないのですか?
A. 条件分岐やループの制御においては、If文やFor文で構造化する書き方が推奨されており、GoToの多用は避けるべきとされています。ただし、VBAのエラー処理(On Error GoTo)のように、GoToを使うことが実務上標準的とされる用途もあり、一律に「使うべきでない」というわけではありません。
Q. On Error GoToとOn Error Resume Nextはどう使い分ければいいですか?
A. エラーが発生した際に特定の対応処理(メッセージ表示・後片付けなど)を実行したい場合はOn Error GoToを、特定の1行だけエラーを無視してよい場合(存在確認など)はOn Error Resume Nextを、それぞれ限定的な範囲で使うのが基本です。
Q. ラベルの名前には何でも使えますか?
A. 基本的には変数名と同様のルール(英数字とアンダースコアの組み合わせなど)に従う必要があります。VBAの予約語(Sub、Ifなど)と同じ名前は使えません。分かりやすさの観点から、ErrorHandlerやSkipなど、用途が伝わる名前を付けるのが一般的です。
Q. エラー処理を入れると、マクロの動作が遅くなりますか?
A. On Error GoTo自体の処理負荷は非常に小さく、実務上体感できるような速度低下にはつながりません。エラー処理を入れないことによる「エラー発生時の業務停止リスク」の方が、実務上はるかに大きな問題になります。
Q. 複数の異なるエラーに対して、それぞれ違う対応をすることは可能ですか?
A. 可能です。エラー処理の中でErr.Number(エラー番号)を確認し、If文で分岐させることで「このエラーのときはA、あのエラーのときはB」といった個別の対応を実装できます。
Q. 非エンジニアでもAIにエラー処理の実装を任せられますか?
A. 任せられます。「このファイルがない場合はどうしてほしいか」「エラーが起きたとき誰が見ても分かるメッセージにしてほしい」といった要望を日本語で伝えれば、AIが適切なOn Error GoToの実装を提案してくれます。ただし、実装後は意図的にエラーを発生させて動作確認する工程を必ず残すべきです。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




