【VBA初心者必見】#N/Aで止まらない!IsError関数でエラーを華麗にスルーするテクニック

【業務効率化】VBA
スポンサーリンク

「あぁ、また止まった……。せっかく作ったマクロなのに、途中でエラーが出て動かなくなる。もう嫌だ!」

こんな風に頭を抱えたことはありませんか?

例えばVLOOKUP関数で値が見つからなかった時の「#N/A」や、計算できない時の「#VALUE!」。これらのエラー値がセルにひとつ紛れ込んでいるだけで、苦労して作り込んだマクロは処理を中断してしまいます。

そんな「エラーによるマクロ停止」から救ってくれるのが、今回紹介するIsError(イズ・エラー)関数です。

【業務効率化】VBAの記事を見る 

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の記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました