「あぁ、また止まった……。せっかく作ったマクロなのに、途中でエラーが出て動かなくなる。もう嫌だ!」
こんな風に頭を抱えたことはありませんか?
例えばVLOOKUP関数で値が見つからなかった時の「#N/A」や、計算できない時の「#VALUE!」。これらのエラー値がセルにひとつ紛れ込んでいるだけで、苦労して作り込んだマクロは処理を中断してしまいます。
そんな「エラーによるマクロ停止」から救ってくれるのが、今回紹介するIsError(イズ・エラー)関数です。
IsError関数は「道路の陥没センサー」
VBAにおける「エラー判定」は、例えるなら「進む先の道路に穴が開いていないかを事前に察知するセンサー」のような役割を果たします。
マクロという車を走らせる前に、IsError関数というセンサーを用いて「この先にエラー値という陥没がないか」をあらかじめ確認するイメージです。
もし穴があれば適切に回避し、安全であればそのまま前進する。この仕組みを取り入れるだけで、マクロが途中で立ち往生するリスクを劇的に減らすことができます。
そのまま使える!IsError関数の基本構造
それでは、実際のコードを確認してみましょう。まずはセルA1にエラーが残っているかどうかを判定する、シンプルな記述例です。
Sub ErrorCheckSample()
' 変数を宣言します
Dim targetValue As Variant
' セルA1の値を取得します
targetValue = Range("A1").Value
' IsError関数で「エラーかどうか」を判定します
' もし(If) エラーだったら(IsError)
If IsError(targetValue) Then
' エラーだった時の処理
MsgBox "セルA1にエラーが見つかりました!修正してください。", vbExclamation
Else
' エラーではなかった時の処理
MsgBox "セルA1の値は「" & targetValue & "」です。正常です!", vbInformation
End If
End Sub
実務で使える!大量データのループ判定
現場で本当に使いたいのは、たくさんの行をまとめて処理するパターンですよね。エラーがあれば「エラーあり」と書き込むコードを紹介します。
Sub LoopErrorCheck()
Dim i As Long
Dim lastRow As Long
' データの最終行を見つけます
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2行目から最終行まで順番にチェックします
For i = 2 To lastRow
' そのセルの値がエラー値かどうかを判定
If IsError(Cells(i, 1).Value) Then
' エラーなら隣のセルに「要確認」と書く
Cells(i, 2).Value = "要確認"
' セルの色を薄い赤にして目立たせる
Cells(i, 1).Interior.Color = RGB(255, 200, 200)
End If
Next i
MsgBox "チェックが完了しました。赤色のセルを確認してください!"
End Sub
今回は「要確認」と記載させていますが、このエラー判定を応用すれば、エラー発生時のみ別のマクロを起動させるなど、より柔軟な処理が可能になります!
おわりに:エラーはあらかじめ予測しておこう
プログラミングにおいて「エラーが出る=失敗」ではありません。起こり得るエラーをあらかじめ予測し、先回りして対策を立てておくことが大切です。
エラーによる予期せぬ停止を防ぐことで、修正やメンテナンスにかかる時間を大幅に削減できます。
ぜひ実務のコードに取り入れてみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント