Excel - VBA

IsNumeric 함수의 함정

EGTools 2023. 8. 6. 11:19

오늘 VBA로 처리하던 중 이상한 문제가 있어 기록해 둡니다.

IsNumeric() 함수는 인자가 숫자나 숫자로 전환될 수 있으면 True를 반환합니다.

 

생각지도 못했던 문자열이 True로 나오는 문제가 있으므로 주의 해야 합니다.

IsNumeric("0D0") = True

IsNumeric("0E0") = True

 

자릿수와 상관없이  숫자열 + D/E + 수자열에 대해서 IsNumeric이 True가 됩니다.

CDbl로 평가해 보면 아래처럼 지수형태의 숫자로 인지하고 있습니다.

CDbl("1234D02") = 123400

CDbl("1234E02") = 123400

 

그래서 아래처럼 지수형태로 검토해 보면

CDbl("1234D-2") = 12.34

CDbl("1234E-2") = 12.34

 

지수형태의 문자열도 IsNumeric에서 True가 됨에 주의가 필요합니다.

 

CDbl("1.234D308")  또는 CDbl("9.9D307") 처럼 308자리 정도까지 True가 나오며

그이상의 자릿수는 Overflow 에러가 납니다.

CDbl("1.234D-123456890") 처럼 음수 지정은 0으로 나오게 됩니다.