Excel VBA 사용자 정의 함수에 입력 데이터가 표준 Excel 오류(예: #DIV/0) 중 하나임을 인식할 수 있는 방법이 있는지 알고 싶습니다.
Myadd와 같은 매우 간단한 Excel VBA 사용자 정의 함수가 있다고 가정해 보겠습니다.
Function Myadd(a, b)
Myadd = a + b
End Function
=Myadd(A1,A2)
Excel 시트 셀 A3에 A1과 A2가 숫자인 한 이것은 분명히 잘 작동한다고 입력합니다 . 그러나 A1에서 표준 Excel 오류를 생성하면 예를 =1/0
들어 #DIV/0이 발생합니다! A1 및 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