エクセルVBA Errオブジェクトを使ってエラーコードに応じた処理を指定する

★気に入ったらシェアをお願いします!


Excel,VBA,Errオブジェクト,メッセージ表示

皆様こんにちは!ノグチです。

前回はこちらの記事でOn Error GoTo構文を用いた、エクセルVBAでエラーとなる場合の処理を指定する方法をご案内しました。

ただのエラーじゃ勿体無い!On Error GoToでVBAエラー時に任意のメッセージを表示する
エクセル VBAにおいてon error goto を使うことで、VBAのエラー時処理として任意のメッセージを表示する方法をご紹介しています。 VBAで使っている処理行列の変数をメッセージに渡して、エラー対象セルをメッセージに表示することもできますよ!
今回は前回からのエラーつながりということで、Errオブジェクトを用いてVBA実行時エラーの内容に応じた処理を指定する方法をご案内します!

スポンサーリンク

Errオブジェクトとは?

Errオブジェクトは、

VBAでエラーになった時にエラーの情報を一時的に格納しておいてくれる

というものです。

エクセルVBAでは、実行時エラーごとに番号が振られています。

例えば、下記のメッセージ。

これは計算処理の対象にしていたセルに、数字型以外の値が入っていた為にエラーになったものです。
excel, vba, エラー,on error goto,メッセージ

上記のメッセージをみてみると、「実行時エラー’13’」と書いてありますよね。

この’13’という数字がエラーコードです。

Errオブジェクトは、VBAエラーとなった時にこのエラーコード(Number)とエラーの説明情報(Description)を格納しておいてくれます。

つまり、Errオブジェクトに格納されたエラー情報を使えば、エラーの種類に応じた処理を指定することができるのです。

Errオブジェクトの使用例

では早速、以下のコードを使って使用例をお見せしますね。

今回は価格表の総額(B列)を発注数(C列)で割り戻して単価(D列)を算出するコードを用意しました。

価格表の3行目、「ファイル」の発注数は、敢えて空欄にしています。
Excel,vba,Errオブジェクト,価格表

このコードを使って価格表の除算処理をすると、表の3行目「発注数」の値が空白になっているのでエラーになってしまいます。

こんな感じ。
Excel,vba,エラーメッセージ,Err

はい。エラーコードとともに実行時エラーが表示されます。

では、このエラーコード’11’を使って、もっとわかりやすいメッセージを表示する処理にしてみましょう。

今回の実行時エラーのエラーコードは11なので、

Errオブジェクトを使って「エラーコードが11の場合はメッセージを表示する」

という処理にしてみます。

コードはこちら。

29行目のErr.Number~と記述してある部分が捕まえたエラーコードの値に応じた処理を指定している部分です。

このコードで先ほどの3行目の発注数が空白だった価格表の計算処理をしてみると…
Excel VBA エラーメッセージ Errオブジェクト

こうなります。

こうして、実行時エラーのメッセージの代わりにメッセージを表示させるというように、エラー時の処理指定することができるようになります。

エラーコードによる処理分岐

1つのエラーコードに対して処理を指定することだけでなく、エラーコードの値によって処理を分岐させることもできます。

先にお見せしたコードのエラー処理部分を、Select Caseを使った分岐条件で記述することで、

複数のエラーコードに対してそれぞれエラー時の処理を指定することができます。

(もちろんIf文でも記述できます。)

先ほどのコードのエラー処理部分に、エラーコードが13だった場合の処理も加えてみます。

こんな感じ。

  • 処理に使うセルの値が空白か0になっている場合
  • 文字列が入っている場合

こうすれば、Errオブジェクトで捕まえたエラーコードの値に応じた処理を2パターン指定することができました。

メッセージ表示以外のエラー処理の例

今回の例ではエラーの度にメッセージを表示させて計算処理を止めていますが、

Errオブジェクトでエラートラップした後、別シートにエラー内容を記述して次の計算処理に行かせることもできます。

処理対象のデータが多い場合は、毎回エラーで処理を止めるよりもこちらの方法のほうが便利だったりします。

まとめ

いかがでしたでしょうか。

今回はErrオブジェクトを使って、エラーコードにあったエラー処理を指定する方法をお伝えしました。

エラートラップに限らず、プログラムのエラーや処理の結果出力されるコードによって処理を分岐させる方法はVBA以外のプログラミング言語でもよく使用されますので、興味のある方は頭の隅っこにでも置いておかれるとよいかと思います。

それでは、最後までお読みいただきありがとうございました!


The following two tabs change content below.
ノグチ

ノグチ

元製造子会社SE、ERPパッケージシステムコンサルタント(販売管理、購買管理、生産管理、設備管理他)。 業務システム保守・導入両方やった経験をお伝えすることで、少しでもシステムや手作業に悩まされる人が減ればいいなぁ、楽にお仕事してもらえたらいいなぁと日々夢見ております。