標準の Excel エラーをカスタム VBA 関数の入力時にトラップできますか?

標準の Excel エラーをカスタム VBA 関数の入力時にトラップできますか?

Excel VBA カスタム関数で、入力データが標準の Excel エラーの 1 つ (例: #DIV/0!) であることを認識する方法があるかどうかを知りたいです。

非常に単純なExcel VBAカスタム関数Myaddがあるとします。

Function Myadd(a, b)
   Myadd = a + b
End Function

Excel シートのセル A3 に次のように入力します。=Myadd(A1,A2) これは、A1 と A2 が数値である限り、明らかに正常に機能します。ただし、A1 に標準の Excel エラーを作成すると、たとえば、=1/0A1 で #DIV/0! となり、A1 は Myadd 関数に入力されます。数値入力がないため、Myadd は #VALUE! になります。

VBA で Isnumeric 関数を使用できますが、この例に固有のものになります。ただし、一般的に、カスタム関数への入力が実際には #DIV/0! や #VALUE! などのエラー コードのいずれかを含むセルであることを知る方法はありますか。

ありがとう。

ここに画像の説明を入力してください

答え1

エラーの場合はIsError()#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!

パラメータに単一のセルが含まれているかどうかを確認するにはTypeName(a) = "Range"CountLarge > 1


Option Explicit

Public Function MyAdd(ByVal a As Variant, ByVal b As Variant) As Long

    If TypeName(a) = "Range" Then If a.Cells.CountLarge > 1 Then Set a = a.Cells(1)
    If TypeName(b) = "Range" Then If b.Cells.CountLarge > 1 Then Set b = b.Cells(1)

    If IsError(a) Then
        a = 0
    Else
        a = IIf(Not IsNumeric(Val(a)), 0, Val(a))
    End If

    If IsError(b) Then
        b = 0
    Else
        b = IIf(Not IsNumeric(Val(b)), 0, Val(b))
    End If

    MyAdd = a + b
End Function

関連情報