VBAのOnでエラー処理やイベント制御を行う方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Onの概要

エラー処理・イベント制御 VBAの予約語

On

概要 On は、VBAでエラー処理やイベント制御を行うために使用されるキーワードです。代表的な使い方として On ErrorOn Time があります。

わかりやすく説明 On は、「特定の状況になったらこの処理をして!」と指示するための命令です。エラー発生時の処理や、イベントの制御に利用されます。

  • On Error を使ってエラー発生時の処理を指定できる。
  • On Error Resume Next でエラーを無視できる(ただし注意が必要)。
  • On Error GoTo ラベル でエラー時に特定の処理へジャンプできる。
  • OnTime を使って指定時刻に処理を実行できる。

On Errorの基本的な使い方(エラー回避)

エラーが発生してもプログラムを止めずに処理を続ける例です。

Sub IgnoreError()
    On Error Resume Next ' エラーを無視
    Dim x As Integer
    x = 10 / 0 ' 0除算エラー
    MsgBox "処理が継続されました。"
End Sub

解説:

  • On Error Resume Next により、エラーが発生してもスクリプトが停止しない。
  • 本来は 0 除算エラーが発生するが、エラーメッセージが表示されず次の処理に進む。

On Error GoToを使ったエラー処理

エラー発生時に特定の処理を実行する例です。

Sub HandleError()
    On Error GoTo ErrorHandler ' エラー時にErrorHandlerラベルへジャンプ
    
    Dim x As Integer
    x = 10 / 0 ' 0除算エラー
    
    Exit Sub ' 正常処理が終わったらここで終了

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbExclamation, "エラー"
    Err.Clear ' エラーをクリア
End Sub

解説:

  • On Error GoTo ErrorHandler により、エラー発生時に ErrorHandler へジャンプ。
  • エラーメッセージを表示し、Err.Clear でエラーをクリア。

ExcelでのOnの活用例(OnTimeで処理を予約)

OnTime を使って、指定時刻にマクロを自動実行する例です。

Sub ScheduleMacro()
    Dim executeTime As Date
    executeTime = Now + TimeValue("00:00:10") ' 10秒後に実行
    
    Application.OnTime executeTime, "MyMacro"
End Sub

Sub MyMacro()
    MsgBox "10秒後に実行されました!", vbInformation, "OnTimeの例"
End Sub

解説:

  • OnTime を使って 10 秒後に MyMacro を実行。
  • 時間指定で自動実行するスケジュール処理を組める。

エラーを回避する方法

エラーが発生する可能性のあるコードに適切なエラーハンドリングを追加する例です。

Sub SafeDivision()
    On Error Resume Next
    Dim x As Integer, y As Integer
    x = 10
    y = 0
    Dim result As Variant
    
    result = x / y ' 0で割るためエラー発生
    
    If Err.Number <> 0 Then
        MsgBox "エラー発生: " & Err.Description, vbExclamation, "エラー"
        Err.Clear
    Else
        MsgBox "計算結果: " & result
    End If
End Sub

解説:

  • On Error Resume Next でエラーを無視。
  • エラーが発生した場合、メッセージを表示し、Err.Clear でリセット。

Onの注意事項

  • On Error Resume Next の乱用に注意: すべてのエラーを無視すると、問題の特定が難しくなる。
  • エラーハンドリングを適切に行う: On Error GoTo を使い、エラー処理を明示するのが望ましい。
  • OnTime の実行タイミングに注意: スケジュールしたマクロはブックを閉じても実行されるため、適切にキャンセルする必要がある。

よくある質問

Q: On Error Resume Next はいつ使うべきですか?
A: 軽微なエラー(ファイルが存在しない場合のチェックなど)で使うのが適切です。すべてのエラーを無視すると問題を見逃す原因になります。
Q: OnTime でスケジュールした処理をキャンセルできますか?
A: はい。Application.OnTime を使って登録した処理をキャンセルできます。
Q: On Error GoTo で指定したエラー処理を抜けるには?
A: Resume Next を使うと、エラー処理を抜けて次の処理を実行できます。
Q: On Error を解除するには?
A: On Error GoTo 0 を使うと、エラー処理を無効化できます。

まとめ

  • On は、エラー処理やイベント制御のために使用される。
  • On Error Resume Next はエラーを無視し、On Error GoTo はエラー処理を指定できる。
  • OnTime を使うと、指定した時間にマクロを実行できる。
  • エラー処理を適切に行い、予期しないエラーを防ぐ。
  • エラーハンドリングを組み込むことで、安全にVBAを実行できる。