【VBA】エラー値を意図的に生成する(CVErr)

エクセルVBAで使うコードの備忘録。VBAで「#DIV/0!」などのエラー値を意図的に生成する値として設定したりするためのコード。CVErr関数を使って取得することができます。

スポンサーリンク

事前準備

特に必要ありません。

CVErr関数の使い方

特定のエラー値を生成するにはCVErr関数を使用します。この関数に引数としてエラー番号を指定してやると、エラー値(Variant変数)が返ってきます。書式は下記のような感じ。

[エラー値(Variant)] = CVErr([エラー番号])

エラー番号としては、自分で独自に設定して適当な番号を使うことも可能ですが、今回はExcelを使用していると目にすることのあるエラーを意図的に発生させることが目的なので、エラー番号として指定する数字が重要になります。代表的なエラーとエラー番号の関係は以下になります。

エラー値引数(定数)引数(値)
#NULL!xlErrNull2000
#DIV/0!xlErrDiv02007
#VALUE!xlErrValue2015
#REF!xlErrRef2023
#NAME?xlErrName2029
#NUM!xlErrNum2036
#N/AxlErrNA2042

この表の引数をCVErr関数に与えてやれば、戻り値として表のエラー値が返ってきます。

サンプルコード

下記のサンプルコードでは、エラー値を格納するための変数「errVal」にエラー値を順次設定するようにしてあります。参考として、CVErr関数の引数として定数を与える場合と、実際に値を与える場合の二通りを併記してあります。どちらの方法でも得られる値は(当然ですが)同じです。わかりやすいし、コードの可読性も上がるので個人的には定義済の定数を使うことをお勧めします。

Public Sub createError()
    
    '--- エラー値を格納する変数 ---'
    Dim errVal As Variant
    
    '--- #NULL! ---'
    errVal = CVErr(xlErrNull)
    errVal = CVErr(2000)
    
    '--- #DIV/0! ---'
    errVal = CVErr(xlErrDiv0)
    errVal = CVErr(2007)
    
    '--- #VALUE! ---'
    errVal = CVErr(xlErrValue)
    errVal = CVErr(2015)
    
    '--- #REF! ---'
    errVal = CVErr(xlErrRef)
    errVal = CVErr(2023)
    
    '--- #NAME? ---'
    errVal = CVErr(xlErrName)
    errVal = CVErr(2029)
    
    '--- #NUM! ---'
    errVal = CVErr(xlErrNum)
    errVal = CVErr(2036)
    
    '--- #N/A ---'
    errVal = CVErr(xlErrNA)
    errVal = CVErr(2042)
    
End Sub