[Excel VBA] エラー処理 <確認問題>
今回は、Excel VBAのエラー処理に関する理解度チェック問題です。
知識的な観点で言うと初・中級レベルの方向けの内容で、問題は5問あります。挑戦してみましょう。
【問題1】On Error Resume Next の動作
次のコードを実行すると、メッセージボックスに何が表示されますか?
1 2 3 4 5 6 |
Sub TestErrorHandling() Dim x As Integer On Error Resume Next x = 10 / 0 MsgBox "x の値: " & x End Sub |
- 「0」 と表示される
- エラーが発生し、実行が停止する
- 空白(何も表示されない)
- エラーを無視して次の処理へ進み、「x の値: 0」と表示される
正解:
4) エラーを無視して次の処理へ進み、「x の値: 0」と表示される
(解説)
- On Error Resume Next により エラーが発生しても処理が継続される。
- x = 10 / 0 はゼロ除算エラーになるが、スキップされるため MsgBox は実行される。
- ただし、エラーによりx には値が代入されない。
- x は 事前に宣言されている変数(Integer 型) なので、初期値の 0 のまま。
- 「x の値: 0」 を表示する。
【問題2】On Error GoTo の使い方
次のコードを実行すると、どうなりますか?
1 2 3 4 5 6 7 8 |
Sub TestGoToError() On Error GoTo ErrorHandler Dim arr(3) As Integer arr(5) = 10 Exit Sub ErrorHandler: MsgBox "エラーが発生しました!" End Sub |
- エラーが発生し、処理が停止する
- “エラーが発生しました!" というメッセージが表示される
- 正常に実行され、エラーは発生しない
- arr(5) = 10 で強制終了するが、エラーメッセージは出ない
正解:
2) “エラーが発生しました!" というメッセージが表示される
(解説)
- On Error GoTo ErrorHandler により、エラー発生時に ErrorHandler: へジャンプする。
- arr(5) = 10 は配列の範囲外アクセスでエラー発生。
- ErrorHandler: にジャンプし、メッセージボックスが表示される。
【問題3】Err オブジェクトの活用
次のコードを実行したとき、メッセージボックスに表示される内容はどうなりますか?
1 2 3 4 5 6 7 8 |
Sub TestErrObject() On Error Resume Next Dim x As Integer x = 10 / 0 If Err.Number <> 0 Then MsgBox "エラー番号: " & Err.Number & ", 内容: " & Err.Description End If End Sub |
- エラー番号: 0, 内容: (空白)
- エラー番号: 11, 内容: ゼロで除算しました
- エラーが発生しないため、メッセージは表示されない
- エラー番号: 1004, 内容: アプリケーション定義またはオブジェクト定義のエラー
正解:
2) エラー番号: 11, 内容: ゼロで除算しました
(解説)発生したエラーの情報はErr オブジェクトに格納されます。Err オブジェクトを調べることによりエラー内容を確認することが出来ます。
- 10 / 0 はゼロ除算エラー(エラー番号 11)。
- Err.Number でエラー番号を取得できる。
- Err.Description でエラーの内容("ゼロで除算しました")が表示される。
【問題4】エラー処理のリセット
次のコードを実行したとき、最後の MsgBox は何が表示されますか?
1 2 3 4 5 6 7 8 9 10 11 |
Sub ResetError() On Error Resume Next Dim x As Integer x = 10 / 0 Err.Clear If Err.Number = 0 Then MsgBox "エラーはクリアされました" Else MsgBox "エラーが残っています" End If End Sub |
- “エラーはクリアされました"
- “エラーが残っています"
- エラーが発生し、処理が停止する
- 何も表示されない
正解:
1) “エラーはクリアされました"
(解説)
- Err.Clear を実行すると、エラー情報がリセットされる。
- リセットにより Err.Number = 0 になるため、"エラーはクリアされました" と表示される。
【問題5】エラー処理の終了
On Error Resume Next の影響を解除するには、どのコードを追加すればよいでしょうか?
- Err.Clear
- On Error GoTo 0
- On Error Resume Next をもう一度書く
- On Error Exit
正解:
2) On Error GoTo 0
(解説)
- On Error Resume Next は、エラーを無視して次の行へ進める設定。
- On Error GoTo 0 を実行すると、通常のエラーチェックに戻る(エラー発生時に停止)。
- Err.Clear はエラー情報が削除されるだけで、エラー処理の方法については変更されない。
ディスカッション
コメント一覧
まだ、コメントがありません