INDEX
Onの概要
エラー処理・イベント制御 VBAの予約語 | ||
On 概要 On は、VBAでエラー処理やイベント制御を行うために使用されるキーワードです。代表的な使い方として わかりやすく説明 On は、「特定の状況になったらこの処理をして!」と指示するための命令です。エラー発生時の処理や、イベントの制御に利用されます。 |
||
|
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を実行できる。