◆エラー処理
プログラム実行時、何らかの原因でエラーが発生し、プログラムが途中で止まってしまう
ことがあります。
エラーの原因はプログラムミスもありますが、
・Excelの表に想定していないデータが入っていた
・ユーザーが予期しない操作をした
などで、エラーが発生する場合があります。
完全にエラーを無くすのは難しい状況です。
そこで、プログラム実行中にエラーが発生したば場合、どのような処理を実行するか、
あらかじめプログラミングしておくことで、エラーで止まってしまう事を回避できます。
下記にエラー処理のステートメントをまとめました。
ステートメント | 内容 |
On Error GoTo ラベル(又は行番号) | エラーが発生した場合 ラベル(又は行番号) 以下のステートメントを実行する |
On Error Resume Next | エラーを無視して実行 |
On Error GoTo 0 | 上記のエラー処理を解除する |
Resume | エラーが発生した行へもどる |
Resume Next | エラーが発生した次の行へもどる |
発生したエラーには、エラー番号とエラー内容が割り当てられていて、エラーの要因が
分かるようになっています。
エラー番号は Errオブジェクトの Number プロパティで、エラー内容は Description
プロパティで知ることができます。
下記にエラー番号とエラー内容の一覧をまとめました。
エラー番号 | エラー内容 | エラー番号 | エラー内容 |
6 | オーバーフローした | 58 | すでに同名のファイルが存在している |
7 | メモリー不足 | 62 | ファイルにこれ以上データがない |
9 | インデックスが有効範囲に無い | 68 | デバイスが準備されていない |
11 | 0で除算した | 71 | ディスクが準備されていない |
13 | 型が一致しない | 75 | パスが無効 |
52 | ファイル名または番号が不正 | 76 | パスが見つからない |
53 | ファイルが見つからない | 424 | オブジェクトが必要 |
55 | ファイルはすでに開かれている | 482 | プリンターエラー |
下記のエラー処理ルーチンのサンプルを参考にしてください。
サンプルは、A列 を B列 で割り算しているだけです。
エラーが発生する状況を作成して、動作を確認してください。
Sub test()
Dim i As Integer
On Error GoTo ErrorHandler
For i = 1 To 100
Range("C" & Format(i)) = _
Range("A" & Format(i)) / Range("B" & Format(i))
Next
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 11 '0で除算
Range("C" & Format(i)) = Err.Description
Case 13 '型の不一致
Range("C" & Format(i)) = Err.Description
End Select
Resume Next
End Sub