関数・メソッド

セルのエラー値の種類を判別する【CVErr関数】【ExcelVBA】

構文

CVErr(Expression)  As Variant

Expression・・・エラーの種類を判別する0 ~ 65535の数値
戻り値 ・・・・・Variant型 エラー (0 ~ 65535の数値)で返却。
Expressionに指定した内容のエラーの種類を判別します。
セルのエラー(#REF や#N/Aの判別)が可能です。(定数で返却)
それ以外に自作のエラーを作成する事も可能です。

CVErr関数のサンプルコード

Public Sub sample_CVErr()
    '■セルC4が「#DIV/0」の場合
    Debug.Print CVErr(Range("C4"))       'エラー 2007
    
    '■セルC4が「#N/A」の場合
    Debug.Print CVErr(Range("C4"))       'エラー 2042
    
    '■セルC4が「#REF!」の場合
    Debug.Print CVErr(Range("C4"))       'エラー 2023
    
    
    '■セルA2が「""」の場合はエラー 0が返却
    Debug.Print CVErr(Range("A2"))       'エラー 0
    
    '■セルB3が「"abc"」の場合は数値以外をしている為エラーが発生
    Debug.Print CVErr(Cells(3, 2))       '実行時エラー13 型が一致しません
    
    '■アクティブセルが「1」の場合 エラー1が返却(自作のエラーの設定となる)
    Debug.Print CVErr(ActiveCell.Value)  'エラー 1
End Sub

 

注意点

  • 返却値のデータ型はVariant型で設定する必要があります。
    String型やLong型へ返却した際はエラーが発生します。
実行時エラー13
型が一致しません
  • Variant型以外で設定する場合は CStr関数 や CLng関数 で明示的に型変換すれば問題ありません。
Dim str As String
str = CStr(CVErr(1)) 'エラー1

Dim lng As long
lng = CStr(CVErr(1)) '1
  • val = CVErr(1)等とVariant型の変数に入れた後は IsError関数で val がエラーかどうか判別可能です。

エラー値の種類(定数)

定数エラー番号セルのエラー値内容
xlErrDiv02007#DIV/0!0除算エラー=100/0
XlErrNA2042#N/A値が存在しないVLOOKUP等
xlErrName2029#NAME?関数名やセル範囲などの名称が不正SUMをSAMU等と間違って記載
XlErrNull2000#NULL!セルの指定方法が不正=SUM(A1:A3 C1:C3)等の指定間違い
XlErrNum2036#NUM!数値が大きすぎる/小さすぎる=10^309
XlErrRef2023#REF!セル参照不正=A1*B1とした後B列を削除し、B1が参照できなくなった場合
XlErrValue2015#VALUE!不適切なデータが入力された=A1*B1でA1は数値だがB1は文字列の場合

2019?からは下記の定数も追加されています。(XlCVError列挙に定義)

xlErrGettingData2043
xlErrSpill2045
xlErrConnect2046
xlErrBlocked2047
xlErrUnknown2048
xlErrField2049
xlErrCalc2050

関連記事

数値データかどうか判断する【IsNumeric関数】【ExcelVBA】
日付データかどうか判断する【IsDate関数】【ExcelVBA】
時刻データかどうか判断する【IsDate関数応用】【ExcelVBA】
配列かどうか調べる【IsArray関数】【ExcelVBA】
Nullデータかどうか判断する【IsNull関数】【ExcelVBA】
Emptyデータかどうか判断する【IsEmpty関数】【ExcelVBA】
セルの値がエラーかどうか判断する【IsError関数】【ExcelVBA】

 

コメント

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