【Excelマクロ】エラー処理をもっと強化しよう

なぜエラー処理が大切なのか?

Excel VBAでは、処理中に思わぬエラーが発生することがあります。

たとえば、

  • 存在しないファイルを開こうとした
  • シートが削除されていた
  • 数値の代わりに文字列が入っていた

このようなときに、マクロが強制終了せずに安全に処理を止める・通知する仕組みが「エラー処理」です。

エラー処理を強化することで、次のようなメリットがあります。

  • 実行中のトラブルを回避できる
  • 利用者にわかりやすく原因を伝えられる
  • 予期せぬ終了を防ぎ、業務を止めない

実装するメリット

  • 基本的なエラー処理の書き方を理解する
  • よくあるミスを事前に防ぐ
  • メッセージ表示で利用者にもやさしくする

On Error の基本構文

次に、エラー処理の基本構文を紹介します。

基本形

On Error GoTo ErrorHandler

' ★通常の処理を書く

Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description

解説

Subの部分は省略していますが、Sub内(プロシージャ内)に上記を書いた上で、エラーが起きた場合には、「ErrorHandler:」以降の処理をする、というコードです。

  • On Error GoTo でエラーが出たときに飛ばす場所(ErrorHandler)を指定します。
    エラーが出たら、ErrorHandler(:が必要)以降の処理をして、という指示です。
  • Exit Subを書かないと、正常終了でもErrorHandlerに飛んでしまうので注意。
    Exit Subを入れることで、ここで処理を終了しますが、入れていない場合、ErrorHandler以降も通常のプログラムとして判断してしまうため、動作してしまいます。
  • Err.Description は実際に発生したエラーの内容をメッセージとして表示します。

具体例:シートにデータを書き込む処理

Sub WriteToSheet()

    On Error GoTo ErrorHandler

    Sheets("売上").Range("A1").Value = "テスト"

    MsgBox "処理が完了しました。"
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
End Sub

解説

  • 「売上」シートが存在しないとエラーになります。
  • エラーが起きた場合は、MsgBoxで内容を表示して処理が止まります。
  • 利用者側にも状況が伝わるため、安心して使えるマクロになります。
    自分以外にも使う場合を想定し、エラーとなった内容を伝えるのに必要です。

練習例:存在しないファイルを開こうとしたとき

Sub OpenFile()

    On Error GoTo ErrorHandler

    Workbooks.Open "C:\ファイル1.xlsx"

    MsgBox "ファイルを開きました。"
    Exit Sub

ErrorHandler:
    MsgBox "ファイルが開けませんでした: " & Err.Description
End Sub

解説

  • ファイル1を開くマクロです。
  • ファイル1が存在しないときに Err.Description で状況を確認できます。
    Err.Descriptionは決められた書き方で、この記載をすることでエラーの詳細がわかります。
  • 実際に起こりうるトラブルを想定してエラー処理の仕組みを理解することが大切です。

応用例:ログを残すエラー処理

Sub SaveWithLog()

    On Error GoTo ErrorHandler

    ' 通常処理(例:ファイル保存)
    ActiveWorkbook.Save

    MsgBox "保存が完了しました。"
    Exit Sub

ErrorHandler:
    ' エラー内容をログとして出力
    Dim msg As String
    msg = "エラー発生: " & Now & " - " & Err.Number & " " & Err.Description
    Open "C:\log.txt" For Append As #1
        Print #1, msg
    Close #1

    MsgBox "エラーが発生しました。ログに記録しました。"
End Sub

解説

  • エラー内容をテキストファイルに記録する処理です。
  • 利用者に表示するだけでなく、あとから開発者が原因を追えるようになります。

テキストに書き出してくれるのは便利ですが、テキストに記載する部分のコードは少し難しいため、最初のうちは戸惑うかもしれません。

よくあるエラーと対策のまとめ

状況対策のポイント
シート名の指定ミス存在チェックを行う or エラー処理で回避
ファイルが見つからないDir関数で事前チェック
数値が想定外の形式だったIsNumeric関数で事前チェック

まとめ

VBAでエラー処理を取り入れることは、「予測不能な事態を想定して、事前に準備する」ことが大切です。

特に始めたばかりの方ほど、On Error構文を正しく使えるようになることで、マクロの安定性がぐんと増します。

  • エラーが起きたときの動きをコントロールできる
  • 利用者に状況を伝えやすくなる
  • ログ記録によって開発時のトラブル分析もしやすくなる

まずは簡単な処理にOn Error GoToを加えて、「動かしながら学ぶ」ことから始めてみましょう。

コメント