よく使うステートメント

On Error 実行時エラーの処理

 プログラム実行中に何かのエラーが発生した場合、メッセージを表示して終了させるのに「On Error」ステートメントを使用します。

シートが4個(Sheet1 ~ Sheet4)があります。

この状態で、

Sub ERnashi()

ActiveSheet.Next.Actiivate

End Sub

・現在のアクティブになっているシートの次をアクティブにする。

これを実行しますとエラーメッセージが表示され、途中で処理が中断されてしまいます。

 この処理中断を回避するため、「On Error」ステートメントを使用します。

Sub ERnashi()

  On Error GoTo ER ‘①

  ActiveSheet.Next.Actiivate ‘②

  Exit Sub ‘③

ER: ‘④

  MsgBox “これ以上のシートはありません!”

End Sub

① 「もしエラーが発生したら ER に飛びなさい」という命令

  ※「ER」は任意に決めていいです。たとえば GoTo Machigai 等

② 本来実行したい処理

③ エラーが発生しないしない場合は、ER: へ行くことなく終了するために記述です。

④ エラーが発生した時、メッセージを表示し、終了します。

もう一つ例をあげて説明します。

商品ごとの単価の書かれた「商品マスター」があります。

その横に販売数が入力された「売上表」があります。

販売数 x 単価 で売上金額を自動計算するマクロです。

商品マスターの一か所に、数字であるべき単価に文字列が誤って入力されていたとします。

Sub keisan()

  Dim Uri As Long ‘①

  Dim P As Long ‘②

  For P = 1 To 8

  ‘③

    Uri = Cells(P + 2, 4) * Cells(P + 2, 6)

    Cells(P + 2, 7) = Uri

  Next P

End Sub

① 売上金額を代入する変数 型は数字

② For~Next文のカウンター変数

③ 単価 x 販売数 で売上金額を計算し、売上表に転記する。

このままでは6個目でエラーとなります。

文字列 x 数字 ですから当然です。

そこで、次のように記述します。

Sub keisan()
Dim Uri As Long
Dim P As Long

On Error GoTo ER

For P = 1 To 8
Uri = Cells(P + 2, 4) * Cells(P + 2, 6)
Cells(P + 2, 7) = Uri
Next P

Exit Sub

ER:
MsgBox “「単価」または「数量」に間違いがあります!”

End Sub

 On Erro を使う場合、上記のようにExit Subは重要です。

この例の場合、もし6個目の単価が 25,000 と正常に数字で入力されていれば、エラーは発生しません。

よって For~ext を終了すれば、それでこのプロシジャは終わりになるはずです。

ところがここでこの「Exit Sub」が無ければ、正常なのに ER: の処理 つまりメッセージを表示してしまします。

この点は注意してください。

Exit ループやプロシージャを抜け出る  繰り返しの処理を行う中である条件が満たされたとき、その繰り返し処理から抜け出すのに「Exitステートメント」が使われます。 E...
配列で複数の変数を格納する  いくつかの値やオブジェクト、たとえば、「年度毎の売上額」や「社員名」などをグループ化して扱うことが便利な場合があります。 そん...