お知らせ
こちらの記事は、電子書籍「難しく考えないExcel VBA基礎学習編」として出版されました。記事は途中までが試し読みの対象となります。
howahowablogのVBA記事が電子書籍にて販売となりました。
目標
VBAのエラー処理の基本を理解して利用できる
Errオブジェクト・Numberプロパティを理解して利用できる
VBAにおけるエラーの概要
VBAにおけるエラーとは
VBAにおけるエラーとはプロシージャの実行中に発生する問題で処理の中断や強制終了の原因となります。
VBAにおけるエラー処理
エラーは全てが致命的な問題となる訳ではありません。また目的とする処理としては必要のないエラーも発生します。このようなエラーに対してはエラーの回避を行いシステムの稼働を止めない方法をとる必要があります。VBAでは、このことを「エラー処理」といい、その処理を行うプログラムのことを「エラートラップ」と呼びます。
目的の処理に必要のないエラーとは
一度作成したプロシージャはプログラムなので内容が変わることはありません。ですが、処理の対象となるオブジェクト(変数・配列・セル・シート)はエクセルファイルの状態やユーザーからの操作によって変化します。この変化によって、エラーが引き起こされることがあります。
例えば、入力ボックスに数字を入力してもらって動かすプロシージャがあったとすると、このプロシージャでは数字を格納できる変数を利用していたりします。この時、この変数はInteger型などの数字を扱うもので宣言されているはずですが、もしもユーザーが入力時に間違えて文字列を入力した場合はエラーが発生してしまいます。
こうした場合はエラーによってシステムが止まってしまうよりもユーザーに「正しい値を入力してください」などの注意を促してシステムを止めない方がシステムとして正しい動きと言えます。
このような時にエラー処理を行わせてシステムが停止するのを回避させ稼働を続けるようにします。
エラー処理を行わない場合の処理
エラー処理を行わない場合の処理
シートの準備
次のようなデータベースから社員番号を入力して社員名を検索するプログラムでエラーを発生させてみようと思います。
サンプルプロシージャ1
Sub exampleError()
Dim item As Long
Dim empColumns As Range
Dim hitEmp As Range
Set empColumns = Range(Cells(2, 1), Range("A1").End(xlDown))
item = InputBox("検索する社員の社員番号を入力してください。")
Set hitEmp = empColumns.Find(item, LookAt:=xlWhole)
MsgBox Cells(hitEmp.Row, hitEmp.Column + 1).Value
End Sub
実行結果
エラーが起こるとシステムが停止となります。この停止を回避するためにエラー処理が利用されます。
この記事の試し読みはここまでとなります。
エラー処理の利用方法(基本1)
On Error Resume Nextステートメント
On Error Resume Nextステートメントとは
…
On Error Resume Nextステートメントの利用方法
…
On Error Resume Nextステートメントの文法
…
サンプルプロシージャ2
…
…
…
実行結果
…
エラー処理の利用方法(基本2)
ErrオブジェクトとNumberプロパティ
ErrオブジェクトとNumberプロパティ
…
ErrオブジェクトとNumberプロパティの利用方法
…
…
サンプルプロシージャ3
…
…
実行結果
…
今回は以上となります。
howahowablogのVBA記事が電子書籍にて販売となりました。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。