なぜエラー処理が大切なのか?
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
を加えて、「動かしながら学ぶ」ことから始めてみましょう。
コメント