スポンサーリンク

【VBA】条件分岐とエラー処理(On Errorとの組み合わせ方)

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の条件分岐 (IfSelect Case) と On Error を組み合わせることで、エラーの発生を適切に処理し、より安定したプログラム を作成できます。

  • On Error Resume Nextエラーを無視する が、Err.Number のチェックが必要
  • On Error GoTo を使用すると 明確なエラー処理が可能
  • If 文と組み合わせることで 特定のエラーに応じた処理が可能
  • Select Case を使うと エラー処理の整理がしやすい
  • Err.Raise を使うと カスタムエラーを発生させることができる

適切なエラー処理を組み込むことで、VBAのコードをより堅牢にしましょう!

コメント

タイトルとURLをコピーしました