教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 関数】IsError関数の使い方を教えて!

構文

構文は以下の通りです。

IsError(変数)

解説

IsError関数は、エラー値のチェックを行いたいセルや式を指定します。エラー値とは、計算結果が不正な値やデータが存在しないなどのエラーを示す値です。変数がエラー値を持っている場合にはTrueを返し、それ以外の場合にはFalseを返します。

引数 指定 内容
変数 必須 数式または文字列式を含むバリアント型 (Variant) の式を指定します。

使用例

IsError(Range("A1"))

使い方

具体的な使い方を紹介します。

例1: 条件分岐での利用

以下の例では、セルA1に数値が入力されているかどうかを判定しています。

If IsError(Range("A1")) Then
    MsgBox "セルA1には数値が入力されていません"
Else
    MsgBox "セルA1には数値が入力されています"
End If

この例では、セルA1の値がエラー値である場合に「セルA1には数値が入力されていません」とメッセージボックスが表示されます。そうでない場合は「セルA1には数値が入力されています」とメッセージボックスが表示されます。

例2: エラーハンドリングでの利用

次の例では、ディレクトリ内のファイル数を取得して表示する処理を行っています。ただし、ディレクトリが存在しない場合やアクセス権限のない場合にエラーが発生する可能性があります。IsError関数を使用してエラーハンドリングを行います。

Sub CountFiles()
    On Error Resume Next
    Dim folderPath As String
    folderPath = "C:\Documents\Files" '存在しないディレクトリパスを指定
    Dim fileCount As Long
    fileCount = Application.WorksheetFunction.CountA(Dir(folderPath & "\*"))
    If IsError(fileCount) Then
        MsgBox "ディレクトリが存在しないかアクセス権限がありません"
    Else
        MsgBox "ファイル数: " & fileCount
    End If
End Sub

この例では、CountFilesというサブルーチン内でエラーハンドリングを行います。On Error Resume Nextステートメントにより、エラーが発生しても処理を継続するようにしています。

folderPathに存在しないディレクトリパスを指定しています。CountA関数を使用してディレクトリ内のファイル数を取得し、fileCountに代入します。

その後、IsError関数を使用してfileCountがエラー値であるかどうかを判定します。エラー値であれば「ディレクトリが存在しないかアクセス権限がありません」とメッセージボックスが表示されます。エラー値でなければ「ファイル数: [ファイル数]」というメッセージボックスが表示されます。

プログラミング例

以下に、プログラミング例を紹介します。

例1: エラーセルの特定

特定の範囲内にあるエラーセルを特定し、別の処理を行う例です。

Sub CheckErrors()
    Dim rng As Range
    Set rng = Range("A1:A10")
    Dim cell As Range
    For Each cell In rng
        If IsError(cell.Value) Then
            ' エラーセルが見つかった場合の処理
            ' 例えば、エラーセルの色を変更するなど
            cell.Interior.Color = RGB(255, 0, 0) ' 赤色に設定
        End If
    Next cell
End Sub

この例では、セル範囲A1からA10の中でエラーセルを探し、エラーセルを見つけた場合にそのセルの背景色を赤色に変更しています。

例2: エラーハンドリングの改善

エラーハンドリングを改善するために、IsError関数を利用します。

Sub DivideNumbers()
    On Error Resume Next
    Dim num1 As Double, num2 As Double, result As Double
    num1 = 10
    num2 = 0
    result = num1 / num2
    If Err.Number <> 0 Then
        MsgBox "エラーが発生しました: " & Err.Description
        Err.Clear
    Else
        MsgBox "結果: " & result
    End If
End Sub

この例では、DivideNumbersというサブルーチン内で2つの数値の割り算を行います。ただし、num2に0を設定しているため、エラーが発生します。

On Error Resume Nextステートメントにより、エラーが発生しても処理を継続します。割り算結果をresultに代入し、IsError関数ではなく、Errオブジェクトを使用してエラーハンドリングを行います。

Err.Numberが0でない場合、つまりエラーが発生した場合には、「エラーが発生しました: [エラーメッセージ]」というメッセージボックスが表示されます。また、Err.Clearによってエラーオブジェクトがクリアされ、次のエラーに備えます。

まとめ

IsError関数は、エラー値のチェックやエラーハンドリングに役立つ重要な関数です。データ処理や自動化を行う際には、IsError関数を上手に活用して効率的なプログラミングを目指してください。