VBA CVErr 関数:エラーを作成する

はじめに

Excel VBA マクロの CVErr 関数からエラーを作成する方法を紹介します。

CVErr 関数は、セルのエラーや独自のエラーを作成できます。

CVErr(XlErrNA) なら #N/A のエラーを返します。

CVErr(13) なら エラー 13 のエラーを返します。

セルのエラーの判定や独自のエラーなどを設定したいときに使用します。

エラーを処理するには「エラー処理をする」をご覧ください。
  • 目次
    • CVErr 関数
    • 解説
    • 使用例

CVErr 関数

CVErr(エラー番号)
エラー番号のエラーを作成します。

引数「エラー番号」0 ~ 65,535 の範囲で指定します。
戻り値の型エラー (Error)

引数「エラー番号」

次の値を指定してセルのエラーを作成できます。

定数 エラー番号 セルのエラー
xlErrDiv02007#DIV/0!
XlErrNA2042#N/A
xlErrName2029#NAME?
XlErrNull2000#NULL!
XlErrNum2036#NUM!
xlErrSpill2045#SPILL!
XlErrRef2023#REF!
XlErrValue2015#VALUE!

解説

エラー番号を作成するだけで、エラーは発生しません。そのため「エラー処理をする」や「エラー情報を取得する」方法で、エラーをキャッチしたりエラー情報は取得できません。

エラーを発生させるには「Error 関数」を使用します。

VBA から発生するエラーとは関係ありません。引数「エラー番号」が 13 でも「エラー 13 型が一致しません。」とは別物です。

セルのエラーとして #N/A#VALUE! などを示す XlCVError 列挙体が定義されています。

戻り値を受け取る変数は、Variant 型である必要があります。それ以外の型だと「エラー 13 型が一致しません。」が発生します。

戻り値を「IsError 関数」に渡すと True を返します。これでエラーかどうかを判定できます。

戻り値のエラー番号を数値に変換するには「CLng 関数」を使用します。数値型に作成したエラーを代入すると「エラー 13 型が一致しません。」が発生します。

エラーを作成する理由

一つは、セルのエラーを代入するためです。

もう一つは、独自のエラーを作成するためです。独自のエラーとは VBA から発生するエラーではなく、仕様と違う操作をしたときなどのシステムエラーのことです。

例えば「A を入力してから B のボタンを押す」という仕様に対して、「B のボタンを先に押した」ときのエラーとして作成します。この「B のボタンを先に押した」という操作を仕様で 60000 番のエラーにすると決めておけば、何のエラーが発生したのかわかります。

使用例

エラーを作成する。

Dim v As Variant
v = CVErr(1)
Debug.Print(v) ' エラー 1

v = CVErr(xlErrNA) ' #N/A
Debug.Print(v) ' エラー 2042

' セルのエラーを入力
Range("A1").Value = CVErr(xlErrDiv0)
Range("A2").Value = CVErr(xlErrNA)
Range("A3").Value = CVErr(xlErrName)
Range("A4").Value = CVErr(xlErrNull)
Range("A5").Value = CVErr(xlErrNum)
Range("A6").Value = CVErr(xlErrSpill)
Range("A7").Value = CVErr(xlErrRef)
Range("A8").Value = CVErr(xlErrValue)
1

エラーを数値に変換

CLng 関数」を使用して、エラーの番号を数値に変換できます。

Dim v As Variant
Dim l As Long

v = CVErr(1)
l = CLng(v)
Debug.Print(l) ' 1

v = CVErr(xlErrNA) ' #N/A
l = CLng(v)
Debug.Print(l) ' 2042

l = CVErr(1) ' エラー、型が一致しません

エラーを判定

IsError 関数」を使用して、エラーかどうかを判定できます。数値に変換すれば、その数値と比較できます。

Dim v As Variant

v = CVErr(xlErrNA)
If IsError(v) = True Then
    Debug.Print(v) ' エラー 2042、セルまたは独自のエラー
End If

If v = CVErr(xlErrNA) Then
    Debug.Print(v) ' エラー 2042
End If

Dim l As Long
l = CLng(v)
If l = xlErrNA Then
    Debug.Print(v) ' エラー 2042
End If