この記事ではCVErr関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
CVErr関数の使い方と注意点
CVErr関数は、指定したエラー番号を表すエラー値(Error型)を生成する関数です。
セルに#N/Aや#DIV/0!などのエラーを明示的に入れたいときや、関数からエラー値を返したいときに使います。
構文
CVErr(エラー番号)
- エラー番号 : VBA定義またはユーザー定義のエラー定数または数値(例:xlErrDiv0、2042 など)
- 戻り値 : 指定したエラー番号に対応する Variant型(Errorサブタイプ)のエラー値
VBAで定義されているエラー定数
定数 | エラー番号 | セルのエラー値 |
---|---|---|
xlErrDiv0 | 2007 | #DIV/0! |
xlErrNA | 2042 | #N/A |
xlErrName | 2029 | #NAME? |
xlErrNull | 2000 | #NULL! |
xlErrNum | 2036 | #NUM! |
xlErrRef | 2023 | #REF! |
xlErrValue | 2015 | #VALUE! |
使用例
セルに"#N/A"を代入する
Sub Sample()
Range("A1").Value = CVErr(xlErrNA)
End Sub
xlErrNA
は#N/A
を表すVBA定数(値は2042)です。
関数内で条件に応じてエラー値を返す
Sub Sample()
Dim result1 As Variant
Dim result2 As Variant
result1 = Safedivision(1.234, 0)
Range("A1").Value = result1
result2 = Safedivision(2.468, 2)
Range("B1").Value = result2
End Sub
Function Safedivision(a As Double, b As Double) As Variant
If b = 0 Then
' 第2引数「b」が0の場合は0除算エラー番号を返す
Safedivision = CVErr(xlErrDiv0)
Else
' 第2引数「b」が0以外の場合は除算結果を返す
Safedivision = a / b
End If
End Function
関数の戻り値にエラー値を使う場合は、戻り値の型をVariant
にする必要があります。
IsError関数と組み合わせて判定する
Sub Sample()
Dim val As Variant
val = CVErr(xlErrValue)
If IsError(val) Then
Debug.Print "エラーです:" & CStr(val)
End If
End Sub
▶ 出力結果
エラーです:エラー 2015
xlErrValue
は#VALUE!
を表す定数(値は 2015)です。
このようにCVErr
で作成したエラー値はIsError
関数を使って安全に検出・処理できます。
Debug.Print "エラーです:" & val
はエラーになります。
CVErr
は Variant 型の中のエラー型です。
&
演算子は文字列型との連結
を期待しますが、Variant/Error
を自動で文字列に変換できないため「型が一致しません」エラーになります。
CStr
で文字列化してから連結したり、IsError
でエラー判定によって出力内容を分岐させましょう。
ユーザー定義のエラー番号を作って返す
CVErr関数では、VBAに既存で定義されていない任意のエラー番号(たとえば9999
や8888
など)を使って、
バリデーションや条件分岐などで使用できるユーザー独自のエラー値を作成することができます。
Const USER_DEFINE_ERR1 As Long = 9999
Const USER_DEFINE_ERR2 As Long = 8888
Sub Sample()
Dim val As Variant
Dim inputval As Variant
inputval = InputBox("数値を入力")
If IsNumeric(inputval) Then
If inputval < 0 Then
val = CVErr(USER_DEFINE_ERR1)
Else
val = inputval
End If
Else
val = CVErr(USER_DEFINE_ERR2)
End If
If IsError(val) Then
Debug.Print "誤った入力です : " & CStr(val) ""
Else
Debug.Print val
End If
End Sub
▶ 出力結果
誤った入力です : エラー 9999 ' 0未満の数値を入力した場合(USER_DEFINE_ERR1)
誤った入力です : エラー 8888 ' 数値以外を入力した場合(USER_DEFINE_ERR2)
1 ' 0以上の数値を入力した場合
⚠️注意
CVErrは必ずVariant型に代入する
Sub Sample()
Dim val As Long
val = CVErr(xlErrNA)
End Sub
CVErrの戻り値は「エラー値のVariant型」であり、LongやDouble型の変数には代入できません。
関連するVBA関数
- IsError関数
- IsEmpty関数
- IsNumeric関数
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方