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/0
A1 で #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