エラー処理について

On Errorを使って、エラーが発生したときの処理を定義することができます。
型の不一致などでプログラムを停止させないようにエラー処理を記述する必要があります。

On Errorを指定すると、エラー時にメッセージを表示するなどの制御が可能になります。

エラー処理の定義

On Errorを使ったエラー処理には以下の3種類があります。

On Error Resume Next はエラーが発生しても無視して処理を続けます。
On Error Goto ラベル はエラーが発生すると、指定したラベルに処理を移します。
On Error Goto 0 はエラー処理を無効にします。エラーが発生した行で処理を中断します。

何も定義していない場合は、On Error Goto 0 が有効になっています。

On Error Resume Nextの例

On Error Resume Next

Dim i As Integer
i = "文字" ' 型の不一致でエラー発生
MsgBox "処理終了"

On Error Goto 0 ' これ以降はエラー時に中断する

On Error Resume Nextの場合、エラーが発生した場合でも次の行の処理を続けるため、"処理終了"のメッセージが表示されます。

On Error Resume Nextを指定すると重大なエラーが発生しても見逃す可能性があります。
テスト中など、データ例外などを明示的に検知したい場合は、On Error Goto 0を指定すると、それ以降の行はエラー時に中断させることができます。

On Error Goto ラベルの例

On Error Goto ErrorProc

Dim i As Integer
i = "文字" ' 型の不一致でエラー発生
MsgBox "処理終了"

ErrorProc:
MsgBox "エラー発生"

On Error Goto ラベルの場合、エラーが発生した場合はラベル(ErrorProc)に処理が移るため、"エラー発生"のメッセージが表示されます。
"処理終了"のメッセージは表示されません。

また、ラベルの名前は自由に設定することができます。

On Error Goto 0の例

On Error Goto 0

Dim i As Integer
i = "文字" ' 型の不一致でエラー発生
MsgBox "処理終了"

On Error Goto 0の場合、エラーが発生するとその行で処理が中断します。
"処理終了"のメッセージは表示されません。

エラーの内容を知るには

エラーの内容を知るにはErrオブジェクトを使用します。
Errオブジェクトの各プロパティからエラーの内容を知ることができます。

プロパティ内容
Numberエラー番号
Descriptionエラー番号に対応する文字列(エラー内容)
Source現在のプロジェクト名
HelpFileヘルプファイル名
HelpContextヘルプファイルに対応するコンテキスト番号

ErrオブジェクトとOn Error Goto ラベルの例

On Error Goto ErrorProc

Dim i As Integer
i = "文字" ' 型の不一致でエラー発生
MsgBox "処理終了"

ErrorProc:
MsgBox "エラー番号:" & Err.Number
MsgBox "エラー内容:" & Err.Description

エラーが発生すると、ラベル(ErrorProc)に処理が移り、Errオブジェクトを使って、エラー番号とエラー内容を表示します。
"処理終了"のメッセージは表示されません。

ErrオブジェクトとOn Error Resume Nextの例

On Error Resume Next

Dim i As Integer
i = "文字" ' 型の不一致でエラー発生
If Err.Number <> 0 Then
  Msgbox "エラー発生"
End If

エラーが発生すると、Err.Numberに0以外が入り、"エラー発生"を表示します。
処理はそのまま下の行から続行されます。

On Errorの使い分け方

エラー発生時に中断が許されないアプリケーションでは、On Error Goto ラベル を使用するのが一般的です。

また、エラー発生時に処理を中断したくない場合に、On Error Resume Next を使います。

アプリケーションでエラー箇所が特定できない場合やデバッグ時には On Error Goto 0 で処理を中断させて、調査を行います。
処理を中断してしまうため、デバッグ時以外は利用しないのが一般的です。




Excel VBA講座

関連リンク
 セル、シート、ブックの参照や操作、
 書式設定に関するサンプル集。

 VBScriptの文字列、日付、ファイルの  操作に関するサンプル集。




セルの参照
セルを扱う
セルの範囲を扱う
行や列を扱う
セルに値を取得・設定する
セルに文字列で取得する
セルを選択する
選択しているセルを参照する
セル数、行数、列数を求める
行番号、列番号を求める
セルに名前を付けて参照する
行・列を表示・非表示にする
セルの位置を取得する
表全体を参照する
表の終端を取得する
セルのアドレスを取得する
セルを検索する
セルを並び替える

セルの書式
フォントサイズを設定する
フォント名を設定する
フォントの太字・斜体を設定する
取消線を設定する
上付き文字を設定する
下付き文字を設定する
セルの表示形式を設定する
配置を設定する
横書き・縦書きを設定する
文字の折り返しを設定する
セルを結合・解除する
セルの背景色・文字色を設定する
セルに罫線を引く(線の位置)
セルに罫線を引く(線の種類)
セルに罫線を引く(線の太さ)
セルに罫線を引く(線の色)
セル範囲の周囲に罫線を引く
セルを挿入する
セルを削除する
行の高さ・列の幅を設定する
行の高さ・列の幅を自動調整する
セルをロックする
文字列の一部の書式を設定する
セルに数式を設定する
セルに条件付き書式を設定する
セルにハイパーリンクを設定する
セルに入力規則を設定する
セルに入力規則を削除する
セルの入力規則を詳細設定する


Copyright (C) ExcelVBA@Workshop All rights reserved.