VBAでは、If
文や Select Case
文を使った条件分岐に加えて、適切なエラー処理を組み合わせることで、より安定したプログラム を作成することができます。本記事では、On Error
を活用したエラー処理と条件分岐の組み合わせ方について解説します。
1. エラー処理の基本 (On Error の使い方)
VBAでは、実行中にエラーが発生するとプログラムが停止してしまいます。そのため、On Error
ステートメントを使い、適切なエラー処理を行うことが重要です。
(1) On Error Resume Next(エラーを無視して続行)
この方法では、エラーが発生してもプログラムを止めずに処理を続行できます。
On Error Resume Next
Dim x As Integer
x = 1 / 0 '0で割るエラーが発生するが、プログラムは停止しない
If Err.Number <> 0 Then
MsgBox "エラー発生: " & Err.Description
Err.Clear 'エラー情報をクリア
End If
⚠ 注意: On Error Resume Next
は エラーを無視するため、原因を特定しにくくなる ことがあります。使用する際は、Err.Number
を確認する処理を組み込むことを推奨します。
(2) On Error GoTo(エラーハンドラへジャンプ)
特定のエラーが発生した場合、指定したエラーハンドラへジャンプできます。
Sub TestErrorHandling()
On Error GoTo ErrorHandler 'エラー時に ErrorHandler にジャンプ
Dim x As Integer
x = 1 / 0 '0で割るエラー
Exit Sub '正常終了時はエラーハンドラをスキップ
ErrorHandler:
MsgBox "エラー発生: " & Err.Description
Err.Clear 'エラーをクリア
End Sub
✅ On Error GoTo
は、エラー処理を明確にできるため、安全なエラー管理に適しています。
2. If 文と On Error の組み合わせ
If
文を使うことで、エラー発生時の処理をより柔軟に制御できます。
(1) エラーが発生した場合のみ処理を実行
On Error Resume Next
Dim result As Double
result = 1 / 0 'ここでエラーが発生
If Err.Number <> 0 Then
MsgBox "エラー発生: " & Err.Description
Err.Clear
Else
MsgBox "計算結果: " & result
End If
✅ Err.Number
をチェックすることで、エラー時の処理を明確に制御できます。
(2) 条件分岐で特定のエラーを処理
特定のエラーに対して異なる処理を行うことも可能です。
On Error Resume Next
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("存在しないシート") 'シートが存在しないとエラー発生
If Err.Number = 9 Then '「インデックスが有効範囲外です」エラー
MsgBox "指定されたシートが見つかりません"
ElseIf Err.Number <> 0 Then
MsgBox "その他のエラー: " & Err.Description
End If
Err.Clear
✅ If
文を活用すると、特定のエラーに対して適切な処理を実装できます。
3. Select Case 文と On Error の組み合わせ
エラーコードに応じた処理を分岐させたい場合、Select Case
文を使うと可読性が向上します。
On Error Resume Next
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("存在しないシート")
Select Case Err.Number
Case 0
MsgBox "シートが正常に取得されました"
Case 9
MsgBox "エラー: 指定されたシートが存在しません"
Case Else
MsgBox "その他のエラー: " & Err.Description
End Select
Err.Clear
✅ Select Case
を使用すると、エラー処理が整理されて見やすくなります。
4. Err.Raise を使ったカスタムエラー処理
エラー処理をより厳密に行いたい場合、自分でエラーを発生させることもできます。
Sub CustomErrorTest(ByVal value As Integer)
If value = 0 Then
Err.Raise Number:=9999, Description:="値が0のため、処理できません"
End If
End Sub
Sub Test()
On Error GoTo ErrorHandler
CustomErrorTest 0
Exit Sub
ErrorHandler:
MsgBox "カスタムエラー発生: " & Err.Description
Err.Clear
End Sub
✅ Err.Raise
を使用すると、独自のエラーメッセージを作成できるため、デバッグしやすくなります。
5. まとめ
VBAの条件分岐 (If
や Select Case
) と On Error
を組み合わせることで、エラーの発生を適切に処理し、より安定したプログラム を作成できます。
On Error Resume Next
は エラーを無視する が、Err.Number
のチェックが必要On Error GoTo
を使用すると 明確なエラー処理が可能If
文と組み合わせることで 特定のエラーに応じた処理が可能Select Case
を使うと エラー処理の整理がしやすいErr.Raise
を使うと カスタムエラーを発生させることができる
適切なエラー処理を組み込むことで、VBAのコードをより堅牢にしましょう!
コメント