【VBA】エラー処理の基本!On Error GoTo でエラー発生時に処理を分岐する方法

目次

はじめに

VBAマクロの実行中に、存在しないシートを選択しようとしたり、0で割り算をしようとしたりすると、エラーが発生してプログラムが強制的に停止してしまいます。これは、マクロの利用者にとっては不親切ですよね。

VBAの On Error GoTo ステートメントを使えば、このような「実行時エラー」が発生した際に、プログラムを止めずに、指定したエラー処理のコードブロックへジャンプさせることができます。これにより、エラーが発生したことをユーザーに丁寧に伝え、安全にマクロを終了させることが可能になります。

この記事では、VBAにおける最も基本的なエラーハンドリング手法である On Error GoTo の使い方を、分かりやすく解説します。


On Error GoTo を使ったエラー処理のサンプルコード

このマクロは、Data という名前のワークシートを開こうと試みます。もしそのシートが存在すれば正常終了のメッセージを、存在しなければエラー処理ブロックへジャンプして、エラーメッセージを表示します。

完成コード

' On Error GoTo を使った基本的なエラーハンドリング
Sub BasicErrorHandlingExample()

    '--- エラーハンドラを設定 ---
    ' これ以降でエラーが発生したら、「ErrorHandler:」へジャンプする
    On Error GoTo ErrorHandler
    
    '--- 正常系の処理 ---
    ' 存在しない可能性のある処理を実行
    Worksheets("Data").Activate
    
    ' この行は、エラーが発生しなかった場合にのみ実行される
    MsgBox "処理が正常に完了しました。", vbInformation
    
    ' 正常終了時は、エラー処理ブロックを飛び越してSubを抜ける
    Exit Sub

'--- エラー処理ブロック ---
' ラベル名は任意。コロン(:)を付ける
ErrorHandler:
    ' エラーが発生した場合にのみ、このブロックが実行される
    MsgBox "エラーが発生しました。" & vbCrLf & "「Data」という名前のシートが見つかりません。", vbCritical, "エラー"
    ' この後、Subは自動的に終了する

End Sub

コードの解説

On Error GoTo ErrorHandler

この一行が、エラーハンドリングを開始する宣言です。VBAは、この行以降で実行時エラーが発生すると、即座に ErrorHandler: というラベルが付けられた場所に処理をジャンプさせます。

Exit Sub

これが、非常に重要な一行です。もし Exit Sub がないと、エラーが発生しなかった場合でも、正常系の処理が終わった後に、そのまま ErrorHandler: の処理が実行されてしまいます。

Exit Sub は、正常に処理が完了した場合に、エラー処理ブロックを実行することなく、プロシージャを強制的に終了させるためのものです。

ErrorHandler:

エラーが発生した際のジャンプ先を示すラベルです。好きな名前を付けることができ、末尾に必ず**コロン(:)**を付けます。このラベル以降、End Sub までの間に、エラー発生時に実行したい処理(メッセージの表示など)を記述します。


まとめ

今回は、VBAの On Error GoTo を使った、基本的なエラー処理の方法を解説しました。

  1. プロシージャの冒頭で On Error GoTo ラベル名 を宣言する。
  2. 正常系の処理の最後に Exit Sub を記述し、エラー処理ブロックをスキップさせる。
  3. プロシージャの最後に ラベル名: を記述し、エラー発生時の処理をまとめる。

この3点セットの構造をマスターするだけで、マクロの安定性が格段に向上し、利用者にとってより親切なツールを作成することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次