VBAエキスパート(Excelスタンダード) 試験範囲その5-エラーへの対処

公開日:2018年8月18日

このページでは、VBAエキスパート(Excelスタンダード)の 試験範囲のうち、「エラーへの対処」について概要を説明します。

VBAエキスパート(Excelスタンダード) 試験範囲その1-プロシージャ
目次

1.Excel VBAのエラーとは

Excel VBAは自動的に実行するプログラムです。しかし、プログラム中に文法的なエラーや、文法は正しくともプログラム上に矛盾が発生している場合に起きるエラーは、プログラム動作を止めてしまいます。

プログラムが止まった場合に、VBAを知らないユーザーは対応することができません。

従って、他のプログラミング言語と同様、Excel VBA上でもエラーへの対処は重要です。

2.文法エラーと論理エラー

Excel VBA上のエラーは、文法エラーと論理エラーに分けることができます。

文法エラーとは、記述エラーとも呼ばれ、VBA上の文法に違反した場合に発生するエラーです。文法エラーはコード記述中に発生し、発生した都度、Excel VBAがエラーメッセージを表示して開発者に警告してくれます。

論理エラーは、VBAの文法上の間違いはありませんが、論理的な矛盾が発生しているために起きるエラーです。論理エラーは、さらにコンパイルエラーと実行時エラーの2つに分けることができます。

コンパイルエラーとは、開発者が記述したコードを機械が理解するようにVBAが翻訳した際、機械が論理的な矛盾を発見した場合に起きるエラーです。

実行時エラーとは、コンパイルエラーと同様に論理的な矛盾が生じているものの、コンパイル時には発見できず、プログラムを実行してみて初めて論理エラーの発生が分かるようなエラーです。

このようにコンパイルエラーと実行時エラーとの違いは、コンパイル時に発見されるか、実行時に発見されるかの違いになります。

3.エラーへの対応

エラーへの対応とは、プログラム実行時に実行時エラーが発生してしまった場合に、事前に開発者が準備しておくエラーへの対応をいいます。

開発者が事前に対応しておく類のものであるため、プログラミング段階で事前に想定できるエラー、ということになります。

代表的な例としては、ユーザーが入力した値が、マニュアル通りの書式でない場合が挙げられます。例えば、数値を入力するフォームのところをユーザーが誤って文字を入力するような場合です。

このような想定できるエラーの発生に対して、開発者はエラーメッセージを表示させる、プログラムを終了させるなどのプログラミング対応を行います。このような対応をせずともVBAが自動的に実行時エラーのメッセージを表示してくれますが、開発者向けのメッセージであり、大抵はユーザーには何を言っているのか伝わりません。また、プログラムも動作が止まるだけで終了せず、その後の操作ミスやプログラム破壊などの原因につながります。

そこで、開発者は事前に想定しうるエラーについて、エラー対応を行います。

そのためのプログラミング方法には、まず「エラーが発生したらば、エラー処理専用のコード記述へジャンプする」があります。

これは、「On Error GoTo ラベル名」で記述でき、ジャンプする先には、「ラベル名:」と記述します。これにより、複数のコード箇所で同一のエラーが発生するようなプログラムの場合、一つのエラー対応プログラミングだけで事足りることになります。

次に「どんなエラーが発生したか調べる」があります。これはErrオブジェクトを使用して操作します。

例えば、Numberプロパティはエラー毎に決まっている番号を取得できます。また、Descriptionプロパティはエラーの意味が分かるよう詳細なメッセージを取得できます。

以上のエラー対応のプログラミング方法を使用して、かつエラー時にユーザーが理解しやすいメッセージ表示やプログラムを終了する「End」「Exit Sub」などを組み合わせることで、ユーザーに分かりやすい(ユーザビリティが高い)ソフトウェアを開発します。

4.エラー対策をするためには

エラー対策を適切に行うためには、上述に記述した「ユーザビリティ」という考えがポイントになります。

ユーザーの身になって「ここの動作ではユーザーはどのような操作をするだろうか。それによってどのようなエラー発生が考えられるだろうか」を検討し、エラー発生の場合にはユーザーにエラーを伝え、適切にユーザーの操作を促すような仕組みを考えてコーディングします。