2017-10-05 9 views
1

저는 Excel 파일에 체크 루틴을 작성하기 위해 vba를 사용하고 있습니다. 그들 중 하나는 일부 셀의 값이 소수점이 2 이하인지 확인해야합니다.VBA 10 진수 값이 소수점 두 자리 만 있는지 확인하십시오. Int()를 사용하는 중 오류가 발생했습니다.

Function checkValues(sheet as Worksheet) as Boolean 
    val = sheet.Cells(1,1).Value 
    val = val * 100 
    valInt = Int(val) 

    if valInt <> val then 
     checkValues = false 
     Exit Function 
    end if 
    checkValues = true 
End Function 

문제는 내가, 12와 같은 셀 (1,1)의 값을 넣을 때이 함수는 False를 반환한다는 것입니다 :이를 위해, 나는 기본적으로이 코드가 그 함수를 작성. 내가 디버그를 사용할 때 valInt와 val이 모두 112와 같음을 알 수 있지만 'valInt < val'문장이 왜 '사실'인지 알 수 없습니다.

아무도 도와 줄 수 있습니까?

ps : 이미 Fix() 함수로 변경하고 많은 다른 문장을 사용해보십시오.

대단히 감사합니다.

+0

나는 긴로 더블 valint으로 발을 선언했다를하지만 나를 위해 작동합니다. '.Value' 대신'.Value2'를 시도하십시오. –

+0

배정도 숫자는 10 진수 값을 정확히 표현할 수 없습니다. (10 진수 값은 2의 제곱의 합으로 표현 될 수 없습니다. 예를 들어'0.75'는'2^- 1 + 2^-2'). 'val = CDec (val) * 100'을 사용해보십시오 – YowE3K

답변

1

두 배의 정밀도 숫자는 십진수 값을 정확히 2 진수로 표시 할 수 없으면 (예 : 2^-1 + 2^-2이므로 0.75은 정확한 값) 정확하게 표시 할 수 없습니다. 그래서 Variant/Decimal보다는 Variant/Double의 변수 유형 사용

Function checkValues(Sheet As Worksheet) As Boolean 
    Dim val1 As Variant ' Allows a subtype of Variant/Decimal 
    Dim valInt As Long 
    val1 = CDec(Sheet.Cells(1, 1).Value) * 100 
    valInt = Int(val1) 

    If valInt <> val1 Then 
     checkValues = False 
     Exit Function 
    End If 
    checkValues = True 
End Function 
+0

대단히 고마워요. 문제 해결됨. –