エラートラップ[ExcelのVBA]
エラートラップとはプログラムでエラーをキャッチするものです。エラーになった行は実行せずにユーザーにエラーメッセージを表示する事が多いです。また、システムによってはエラーのログとしてファイルやデータベースにエラー箇所、内容、時間などを保存する事もあります。
Wikipediaで補足:エラートラップ
エラートラップの基本
' エラートラップの基本 Private Sub CommandButton1_Click() Dim X As Long ' エラートラップの開始 On Error GoTo ErrorTrap ' 長整数型に文字列型を代入(意図的なエラー) ' ※エラーで実行処理が「ErrorTrap:」へ移動する X = "あいうえお" ' 上の行がエラーなので実行されない Debug.Print (X) ' エラーがない場合に次の行(ErrorTrap:)を実行しないようにする Exit Sub ' エラー時の処理 ErrorTrap: ' Err.Numberはエラー番号 ' Err.Descriptionはエラー内容 Debug.Print "エラー番号:" & Err.Number & vbCrLf & Err.Description End Sub
実行すると次の結果になります。

エラートラップは
On Error GoTo ラベル名
を宣言した行からエラートラップの開始となります。実行途中でエラーが発生した場合はエラー行を無視して
ラベル名:
から実行が再開されます。
On Error GoTo ラベル名
を宣言した行からエラートラップの開始となります。実行途中でエラーが発生した場合はエラー行を無視して
ラベル名:
から実行が再開されます。
エラー行を無視する
Private Sub CommandButton1_Click() Dim X As Long 'エラーが発生した場合にエラー行を無視して実行を継続する On Error Resume Next X = 12345 X = "あいうえお" Debug.Print (X) End Sub
実行すると次の結果になります。

エラー番号からエラー内容の取得
Private Sub CommandButton1_Click() ' エラー番号:7のエラー内容を取得する Debug.Print Error(7) End Sub
実行すると次の結果になります。

エラー番号とエラー内容の一覧
番号 | エラー内容 |
---|---|
1 | アプリケーション定義またはオブジェクト定義のエラーです。 |
2 | アプリケーション定義またはオブジェクト定義のエラーです。 |
3 | Returnに対応するGoSubがありません。 |
4 | アプリケーション定義またはオブジェクト定義のエラーです。 |
5 | プロシージャの呼び出し、または引数が不正です。 |
6 | オーバーフローしました。 |
7 | メモリが不足しています。 |
8 | アプリケーション定義またはオブジェクト定義のエラーです。 |
9 | インデックスが有効範囲にありません。 |
10 | この配列は固定されているか、または一時的にロックされています。 |
11 | 0で除算しました。 |
12 | アプリケーション定義またはオブジェクト定義のエラーです。 |
13 | 型が一致しません。 |
14 | 文字列領域が不足しています。 |
15 | アプリケーション定義またはオブジェクト定義のエラーです。 |
16 | 式が複雑すぎます。 |
17 | 要求された操作は実行できません。 |
18 | ユーザーによる割り込みが発生しました。 |
19 | アプリケーション定義またはオブジェクト定義のエラーです。 |
20 | エラーが発生していないときにResumeを実行することはできません。 |
21 | アプリケーション定義またはオブジェクト定義のエラーです。 |
22 | アプリケーション定義またはオブジェクト定義のエラーです。 |
23 | アプリケーション定義またはオブジェクト定義のエラーです。 |
24 | アプリケーション定義またはオブジェクト定義のエラーです。 |
25 | アプリケーション定義またはオブジェクト定義のエラーです。 |
26 | アプリケーション定義またはオブジェクト定義のエラーです。 |
27 | アプリケーション定義またはオブジェクト定義のエラーです。 |
28 | スタック領域が不足しています。 |
29 | アプリケーション定義またはオブジェクト定義のエラーです。 |
30 | アプリケーション定義またはオブジェクト定義のエラーです。 |
31 | アプリケーション定義またはオブジェクト定義のエラーです。 |
32 | アプリケーション定義またはオブジェクト定義のエラーです。 |
33 | アプリケーション定義またはオブジェクト定義のエラーです。 |
34 | アプリケーション定義またはオブジェクト定義のエラーです。 |
35 | SubまたはFunctionが定義されていません。 |
36 | アプリケーション定義またはオブジェクト定義のエラーです。 |
37 | アプリケーション定義またはオブジェクト定義のエラーです。 |
38 | アプリケーション定義またはオブジェクト定義のエラーです。 |
39 | アプリケーション定義またはオブジェクト定義のエラーです。 |
40 | アプリケーション定義またはオブジェクト定義のエラーです。 |
41 | アプリケーション定義またはオブジェクト定義のエラーです。 |
42 | アプリケーション定義またはオブジェクト定義のエラーです。 |
43 | アプリケーション定義またはオブジェクト定義のエラーです。 |
44 | アプリケーション定義またはオブジェクト定義のエラーです。 |
45 | アプリケーション定義またはオブジェクト定義のエラーです。 |
46 | アプリケーション定義またはオブジェクト定義のエラーです。 |
47 | DLLのクライアントアプリケーションの数が多すぎます。 |
48 | DLL読み込み時のエラーです。 |
49 | DLLが正しく呼び出せません。 |
50 | アプリケーション定義またはオブジェクト定義のエラーです。 |
51 | 内部エラーです。 |
52 | ファイル名または番号が不正です。 |
53 | ファイルが見つかりません。 |
54 | ファイルモードが不正です。 |
55 | ファイルは既に開かれています。 |
56 | アプリケーション定義またはオブジェクト定義のエラーです。 |
57 | デバイスI/Oエラーです。 |
58 | 既に同名のファイルが存在しています。 |
59 | レコード長が一致しません。 |
60 | アプリケーション定義またはオブジェクト定義のエラーです。 |
61 | ディスクの空き容量が不足しています。 |
62 | ファイルにこれ以上データがありません。 |
63 | レコード番号が不正です。 |
64 | アプリケーション定義またはオブジェクト定義のエラーです。 |
65 | アプリケーション定義またはオブジェクト定義のエラーです。 |
66 | アプリケーション定義またはオブジェクト定義のエラーです。 |
67 | ファイルが多すぎます。 |
68 | デバイスが準備されていません。 |
69 | アプリケーション定義またはオブジェクト定義のエラーです。 |
70 | 書き込みできません。 |
71 | ディスクが準備されていません。 |
72 | アプリケーション定義またはオブジェクト定義のエラーです。 |
73 | アプリケーション定義またはオブジェクト定義のエラーです。 |
74 | ディスク名は変更できません。 |
75 | パス名が無効です。 |
76 | パスが見つかりません。 |
77 | アプリケーション定義またはオブジェクト定義のエラーです。 |
78 | アプリケーション定義またはオブジェクト定義のエラーです。 |
79 | アプリケーション定義またはオブジェクト定義のエラーです。 |
80 | アプリケーション定義またはオブジェクト定義のエラーです。 |
81 | アプリケーション定義またはオブジェクト定義のエラーです。 |
82 | アプリケーション定義またはオブジェクト定義のエラーです。 |
83 | アプリケーション定義またはオブジェクト定義のエラーです。 |
84 | アプリケーション定義またはオブジェクト定義のエラーです。 |
85 | アプリケーション定義またはオブジェクト定義のエラーです。 |
86 | アプリケーション定義またはオブジェクト定義のエラーです。 |
87 | アプリケーション定義またはオブジェクト定義のエラーです。 |
88 | アプリケーション定義またはオブジェクト定義のエラーです。 |
89 | アプリケーション定義またはオブジェクト定義のエラーです。 |
90 | アプリケーション定義またはオブジェクト定義のエラーです。 |
91 | オブジェクト変数またはWithブロック変数が設定されていません。 |
92 | Forループが初期化されていません。 |
93 | パターン文字列が不正です。 |
94 | Nullの使い方が不正です。 |
95 | アプリケーション定義またはオブジェクト定義のエラーです。 |
96 | サポートされているイベント受信最大数のイベントが既に発生しているので、オブジェクトのイベントシンクを実行できません。 |
97 | オブジェクトが定義クラスのインスタンスではない場合、このオブジェクトに関するフレンド関数は呼び出せません。 |
98 | プロパティまたはメソッドの呼び出しの場合には、引数または戻り値としてプライベートオブジェクトへの参照を含めることはできません。 |
99 | アプリケーション定義またはオブジェクト定義のエラーです。 |
100 | アプリケーション定義またはオブジェクト定義のエラーです。 |
エラートラップをリセット(無効)する
Private Sub CommandButton1_Click() ' エラー行を無視する On Error Resume Next ' エラートラップを無効にする On Error GoTo 0 ' エラーを発生させる Err.Raise 7 ' メモリ不足が実行される End Sub
実行すると次の結果になります。

エラーが発生した次の行から実行を再開
Private Sub CommandButton1_Click() On Error GoTo ErrTrap ' エラーを発生させる Err.Raise (7) Debug.Print "この行が実行されました。" Exit Sub ErrTrap: If Err = 7 Then Resume Next ' 発生したエラーが7番の場合は無視して続行 End If End Sub
実行すると次の結果になります。

Visual Basicの基礎
変数/定数/リテラル/データ型/有効範囲
配列/動的配列/構造体/列挙型/エスケープシーケンス
算術演算子/比較演算子/データの型変換
制御構造(If/For/Select/While/Do)
Sub/Functionプロシージャ(手続き/関数)
クラスの作成と使い方
ファイルの操作
エラートラップ
基本のまとめ(上級者用)
エクセル講座のクイックリンク
スポンサーリンク
関連記事
公開日:2015年06月20日 最終更新日:2015年07月06日
記事NO:01059