Excel VBAには、様々な関数が用意されています。
その中でも、エラー処理に関する関数のひとつにCVErr関数があります。CVErr関数は、エラー値を作成するための関数で、数式や関数の計算結果などでエラーが発生した場合に、エラー値を返すことができます。
CVErr関数の使い方
CVErr関数の基本的な使い方は、以下の通りです。
1 |
CVErr(ErrorNumber) |
引数には、ErrorNumberというエラーの種類を表す定数を指定します。以下に、よく使用される定数をいくつか紹介します。
定数名 | 値 | 説明 |
---|---|---|
xlErrDiv0 | 2007 | 0での除算が発生した場合に使用する定数 |
xlErrNA | 2042 | 引数が見つからない場合に使用する定数 |
xlErrName | 2029 | 関数または式の名前が無効な場合に使用する定数 |
xlErrNull | 2000 | 引数がNULLの場合に使用する定数 |
xlErrNum | 2036 | 引数が無効な数値の場合に使用する定数 |
xlErrRef | 2023 | 参照が無効な場合に使用する定数 |
xlErrValue | 2015 | 引数が無効な型である場合に使用する定数 |
例えば、式 “=1/0” によって #DIV/0! エラーが発生した場合、以下のようにCVErr関数を使用することで、同様のエラー値を作成することができます。
1 2 |
Dim myErr as Variant myErr = CVErr(xlErrDiv0) |
注意点
CVErr関数を使用する際には、以下の注意点について把握しておく必要があります。
・ CVErr関数で作成したエラー値を参照する場合には、エラー値の比較に “Is” 演算子を使用する必要があります。 “=” 演算子を使用した場合には、比較対象の数値として解釈され、誤った判定結果となる可能性があります。
・ CVErr関数で作成したエラー値は、エラー処理ルーチンでの利用が主な用途となります。通常の計算処理で使用することはほとんどありません。
まとめ
Excel VBAのCVErr関数は、エラー値を作成するための関数であり、数式や関数の計算結果などでエラーが発生した場合に、エラー値を返すことができます。引数には、エラーの種類を表す定数を指定し、エラー処理ルーチンでの利用が主な用途となります。使用する際には、注意点を把握して、正しく使いこなしていきましょう。
サンプルコード
列Bにある数式の結果を列Cに表示し、エラーが発生した場合には “エラーが発生しました” と表示する例です。
1 2 3 4 5 6 7 8 9 10 11 |
Sub sample1() Dim i As Long For i = 1 To 10 On Error Resume Next Range("C" & i).Value = Range("B" & i).Value If Err.Number <> 0 Then Range("C" & i).Value = CVErr(xlErrValue) End If On Error GoTo 0 Next i End Sub |
特定の範囲内に含まれる値を合計する例です。エラーが発生した場合には、0を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Function SumInRange(rng As Range) As Double Dim cell As Range Dim sumValue As Double For Each cell In rng On Error Resume Next sumValue = sumValue + cell.Value If Err.Number <> 0 Then sumValue = sumValue + CVErr(xlErrValue) End If On Error GoTo 0 Next cell SumInRange = sumValue End Function |
特定の値を含むセルを、別の値に置換する例です。エラーが発生した場合には、元の値をそのまま残します。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub ReplaceValue() Dim cell As Range For Each cell In Selection On Error Resume Next If cell.Value = 0 Then cell.Value = 1 ElseIf cell.Value = "" Then cell.Value = CVErr(xlErrValue) End If On Error GoTo 0 Next cell End Sub |
コメント