更新日:、 作成日:
VBA CVErr 関数:エラーを作成する
はじめに
Excel VBA マクロの CVErr 関数からエラーを作成する方法を紹介します。
CVErr 関数は、セルのエラーや独自のエラーを作成できます。
CVErr(XlErrNA) なら #N/A のエラーを返します。
CVErr(13) なら エラー 13 のエラーを返します。
セルのエラーの判定や独自のエラーなどを設定したいときに使用します。
CVErr 関数の引数と戻り値
CVErr(エラー番号)
エラー番号のエラーを作成します。
引数「エラー番号」 | 0 ~ 65,535 の範囲で指定します。 |
戻り値の型 | エラー (Error) |
引数「エラー番号」
次の値を指定してセルのエラーを作成できます。
定数 | エラー番号 | セルのエラー |
xlErrDiv0 | 2007 | #DIV/0! |
XlErrNA | 2042 | #N/A |
xlErrName | 2029 | #NAME? |
XlErrNull | 2000 | #NULL! |
XlErrNum | 2036 | #NUM! |
xlErrSpill | 2045 | #SPILL! |
XlErrRef | 2023 | #REF! |
XlErrValue | 2015 | #VALUE! |
スポンサーリンク
解説
エラー番号を作成するだけで、エラーは発生しません。そのため「エラー処理をする」や「エラー情報を取得する」方法で、エラーをキャッチしたりエラー情報は取得できません。
VBA から発生するエラーとは関係ありません。引数「エラー番号」が 13 でも「エラー 13 型が一致しません。」とは別物です。
セルのエラーとして #N/A や #VALUE! などを示す XlCVError 列挙体が定義されています。
戻り値を受け取る変数は、Variant 型である必要があります。それ以外の型だと「エラー 13 型が一致しません。」が発生します。
戻り値を「IsError 関数」に渡すと True を返します。これでエラーかどうかを判定できます。
戻り値のエラー番号を数値に変換するには「CLng 関数」を使用します。数値型に作成したエラーを代入すると「エラー 13 型が一致しません。」が発生します。
エラーを作成する理由
一つは、セルのエラーを代入するためです。
もう一つは、独自のエラーを作成するためです。独自のエラーとは VBA から発生するエラーではなく、仕様と違う操作をしたときなどのシステムエラーのことです。
例えば「A を入力してから B のボタンを押す」という仕様に対して、「B のボタンを先に押した」ときのエラーとして作成します。この「B のボタンを先に押した」という操作を仕様で 60000 番のエラーにすると決めておけば、何のエラーが発生したのかわかります。
使用例
CVErr 関数の使用例を紹介します。
エラーを作成する
エラーを作成します。
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)
エラーを数値に変換する
「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
スポンサーリンク