【覚えることは1パターンのみでOK】VBAで初めてエラー処理を書くためのシンプルな方法とは




こんにちわ、VBAマスターのシロ(@siro3460)です。

皆さんは、VBAを書くときにエラー処理をちゃんと書いていますか?

エラー処理をしっかり入れておくとエラーが起きた原因を調べやすくなったり、エラーで強制的に処理が止まることを防いだりすることができます。

Siro
でも、エラー処理ってなんだか難しそう・・・調べてもいくつか方法が出てきて覚えるのが大変・・・

と思っている人もいるかもしれません。

そこで今回は、エラー処理を初めて書く方向けのシンプルなエラー処理の作り方を解説します!

結論:エラー処理はOn Error GoToを覚えればOK

最初に結論ですが、エラー処理を初めて使う方は「On Error Goto」を覚えればOKです!

On Error GoToを使ったサンプルはコチラ。

Sub Test()
On Error GoTo Test_Err

  'あえてint型に入りきらない数字を入れてエラーを出す
  Dim intNum As Integer
  intNum = 10000000

  'エラーが起こらなかった場合のメッセージを念のため入力
  MsgBox "処理が正常に完了しました。"

  Exit Sub

'ここからエラー処理
Test_Err:
  MsgBox "エラーが発生しました。", vbCritical
          
End Sub

この例では、変数intNumに「10000000」のようなint型では入りきらない桁を入れることで、意図的にエラーを発生させています。

エラー処理の書き方について、少し解説しますね。

On Error GoTo Test_Err

まず処理の最初に書いている「On Error GoTo Test_Err」ですが、「エラーが発生したらTest_Errの処理にジャンプせよ」という指示文です。

処理の最初に書いておくことで、エラーが発生したときに「Test_Err:」以降の処理に飛ぶようになります。

補足
「On Error Goto」の後に付ける名前ですが、「関数名 + _Err」にしておくとエラー処理であることがわかりやすくなるのでおすすめです!

※Goto 〇〇で処理にジャンプすることができるので、他で同じようにジャンプ処理を書いているとエラー処理かどうかわかりづらくなるためです。

Exit Sub

処理が上手くいった場合は「Test_Err:」以降の処理は実行したくないですよね。

Test_Err:」の前で処理を止めるために、「Test_Err:」の直前に「Exit Sub」を書いて処理を終了しています。

  • On Error Goto 〇〇を冒頭に書く
  • 処理の最後に「〇〇:」を書いてからエラー時のメッセージを表示するコードを書く
  • 「〇〇:」の直前にExit Subを書く

この3つを意識して書くことで、エラーが起きた場合、正常に処理が完了した場合に動くコードにすることができます。

エラーの原因を特定しやすくするための情報を追加しよう

エラー処理自体の書き方は先ほどの方法でOKなのですが、メッセージが「エラーが発生しました」だけだと、

Siro
で、何のエラーがでたの?どうすればいいの?

となってしまいますよね。

エラーを調べるときは「エラー番号」「エラー内容」の二つがあることが大事なので、こちらをメッセージに追加するのがおすすめです!

先ほどのサンプルを書き換えると次のようになります。

Sub Test()
On Error GoTo Test_Err

  'あえてint型に入りきらない数字を入れてエラーを出す
  Dim intNum As Integer
  intNum = 10000000

  'エラーが起こらなかった場合のメッセージを念のため入力
  MsgBox "処理が正常に完了しました。"

  Exit Sub

'ここからエラー処理
Test_Err:
  MsgBox "エラーが発生しました。" & vbCrLf & _
         "エラー番号:" & Err.Number & vbCrLf & _
         "エラー内容:" & Err.Description _
         , vbCritical
          

End Sub

エラーが発生した場合は、次のように検索するとエラーの対処方法が出てきます。

excel vbs エラー番号 “6”

このように、エラー番号で調べるとバグを解決するのがとても簡単になるのでおすすめです!

補足
「””」で文字を囲って検索すると、その文字が必ず入った記事を検索することができます。

検索をするときのコツについては、「Google検索を効率的に行うためのショートカットキーまとめ」でも紹介していますので、エラー発生後の検索力を高めたい方はコチラもおすすめです。

Google検索を効率的に行うためのショートカットキーまとめ

2018.01.29

エラーにならないのに結果がおかしくバグの原因が見つからない方へ

ここまでエラー処理の書き方を説明してきましたが、エラーが起きず処理の結果だけがおかしい場合もありますよね。

例えば、タイプミスで「1000」と入力するところを「100」と入力してしまった場合などですね。

Sub Test2()
On Error GoTo Test_Err

  Dim intUnitCost As Integer      '単価
  Dim intNum As Integer           '数
  Dim dblSalesTaxRate As Double   '消費税率
  Dim intTotalCost As Double      '合計金額
  intUnitCost = 100               '100のところを誤って1000にしてしまった
  intNum = 2
  dblSalesTaxRate = 1.08

  intTotalCost = intUnitCost * intNum * dblSalesTaxRate

  MsgBox "合計金額は" & intTotalCost & "です"

  Exit Sub

'ここからエラー処理
Test_Err:
  MsgBox "エラーが発生しました。" & vbCrLf & _
         "エラー番号:" & Err.Number & vbCrLf & _
         "エラー内容:" & Err.Description _
         , vbCritical
          

End Sub

この例ではメッセージに出しているので気づきやすいかもしれません。

ただ、複雑な計算をする場合だと、どこで何の値がおかしくなったのか判断しづらかったりしますよね。

そんな時は、「変数の値を確認する方法」を覚えておくのがおすすめです!

【ExcelVBA】変数の値を確認する方法を徹底解説!

2018.06.13

まとめ

今回は、エラー処理を初めて書く方向けのシンプルなエラー処理の作り方について解説しました。

エラー処理を入れておくと、エラーが起きたときの対処がしやすくなり、より速く正確なコードを書くことができるようになります。

使い方も簡単なので、ぜひ使ってみてくださいね!


The following two tabs change content below.

Siro

ネコ好きフリーランスエンジニア。
開発、技術、働き方、ツールなどについて発信しています。
楽しく、開発しようぜ!