検索

キーワード


目次

【Excel VBA】エラーした時、エラー番号と内容を表示する方法

  • 公開日:2023-06-30 13:52:29
  • 最終更新日:2023-06-30 09:16:49

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

皆さんこんにちは、エンジニアのIMMRです。


プログラムを作成して、実行すると下記のようにエラーが発生してしまうことがあります。

まあ、エラー内容はさまざまですが・・・


図1 エラー

図1 エラー


これは、エラーでプログラムが止まっています。


このようにエラーで止まってしまうのはあまりよろしくないのでのエラー対策が必要です。

以前に、対策とした記事を作成しています。

 ・エラーが発生した時だけ、別の処理を行う方法

 ・エラーが発生しても無視して処理を中断しない方法


1つは、エラーが発生したら、別の処理を行う。

1つはエラーが発生しても無視をする。

といった感じです。

どちらもエラーが発生したら・・・ 

ですがどんなエラーが発生したのかがわかりません。


今回は、エラーが発生した時にエラーの番号や内容を表示させる方法を説明します。


1.エラー番号と内容を表示させる方法

エラーの内容を確認するには「Err」オブジェクトを使います。

プログラム実行時に自動で作成されるので、事前に宣言する必要もありません。


エラー番号の場合は、

Err.Number


エラー内容の場合は、

Err.Description


と記載するだけです。


2.エラー番号と内容を表示させる(サンプルプログラム)の作成について

上記で示した通り、「Err.Number」「Err.Description」を記載するだけです。

ですが、正常動作(エラーもしてない)ですと下記のように表示されます。

※コーディングミスにはならないです。


図2 エラー(なし)

図2 エラー(なし)


0といわれても何なのかわからないですよね。

そのため、このような表示はエラーが起きただけするようにします。

方法は、「エラーが発生した時だけ、別の処理を行う方法」を参照して下さい。※上記にリンクがあります。


そして、ただメッセージにErr.Number」「Err.Description」の記載するだけでは、


図3 エラー(直接記載)

図3 エラー(直接記載)

になってしまいます。

実際は、エラーナンバーが「11」で、内容が「0で除算しました」なのにわかりにくいですよね。

「110で除算しました。」→エラー と勘違いをしてしまいます。 何がいけないの? と思ってしまいます。

そのため、メッセージ標記を下記になるように工夫が必要です。


図4 エラー(工夫)

図4 エラー(工夫)


これですとエラーナンバーや内容が見やすくなると思います。

先ほどのように見間違いはなくなります。


3.エラー番号と内容を表示させる(サンプルプログラム)

前章でも説明しましたが、「Err.Number」「Err.Description」を記載するだけです。

そこで今回はわざとエラーが起きるプログラムを作成して、本当に表示されるかを確認したいと思います。


① サンプルプログラム(0 で除算)

Sub test1()

    On Error GoTo Err_m
    Dim a As Long, b As Long

        a = 1
        b = 0
        MsgBox a / b
        
Exit Sub
Err_m:
        MsgBox "エラーナンバー:" & Err.Number & vbCrLf & _
       "エラー内容" & Err.Description

End Sub

これは0で除算をするプログラムです。

変数aに1 bに0をセットして a/bを行います。(1/0)になるので0で除算になります。


② サンプルプログラム(オーバーフロー)

Sub test2()

    On Error GoTo Err_m
    Dim a As Long, b As Long

        a = 10000000000
        b = 2
        MsgBox a / b
        
Exit Sub
Err_m:
        MsgBox "エラーナンバー:" & Err.Number & vbCrLf & _
       "エラー内容   :" & Err.Description

End Sub

これはオーバーフローをするプログラムです。

longで宣言した変数aに格納できるのは、1000000000(10桁)までです。

プログラムでは、11桁を格納しようとしているので、オーバーフローになります。


③ サンプルプログラム(型の不一致)

Sub test3()

    On Error GoTo Err_m
    Dim a As Long, b As Long

        a = 1
        b = "あああ"
        MsgBox a / b
        
Exit Sub
Err_m:
        MsgBox "エラーナンバー:" & Err.Number & vbCrLf & _
       "エラー内容   :" & Err.Description

End Sub

これは型の不一致となるプログラムです。

longで宣言した変数bは数値タイプの型です。そのため、文字である”あああ”を

格納すると型の不一致となりエラーになります。


④ サンプルプログラム(データなし)

Sub test4()

    On Error GoTo Err_m
    
        Workbooks.Open "C:\VBA2.xlsx"
        
Exit Sub
Err_m:
        MsgBox "エラーナンバー:" & Err.Number & vbCrLf & _
       "エラー内容   :" & Err.Description

End Sub

これはデータなしとなるプログラムです。

ブック"C:\VBA2.xlsx"をオープンするプログラムなのですが、

実際、"C:\VBA2.xlsx"はないのでエラーになります。


4.エラー番号と内容を表示させる(サンプルプログラム)の実行

上記のサンプルプログラムを実行した結果です。

どれも想定のエラーで、番号と名前が表示出来ています。


図5 エラー(0 で除算)

図5 エラー(0 で除算)

0で除算したプログラムです。


図6 エラー(オーバーフロー)

図6 エラー(オーバーフロー)

オーバーフローをするプログラムです。


図7 エラー(型の不一致)

図7 エラー(型の不一致)

型の不一致となるプログラムです。


図8 エラー(データなし)

図8 エラー(データなし)

データなしとなるプログラムです。


どれも想定内のエラー内容が正しく表示されています。

エラーした時、エラー番号と内容を表示することが出来ました。


【著者】

Imamura

「挑戦心」を忘れずに、新しいことにチャレンジしています。 資格:VBAエキスパート Excel VBA(ベーシック/スタンダード) 等

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート

よく読まれている記事