문제

큰 값 클러스터의 특정 값으로 가장 가까운 일치를 반환하기위한 응용 프로그램이있었습니다 (이전과 같이 의문) 그리고 나는 VBA 솔루션을 선택했습니다. 상기 응용 프로그램을 사용하는 동안 0.5의 값에 대한 결과가 정확하지 않다는 것을 관찰했습니다. VBA 라운드 함수를 사용하여 0.5에 대해 0을 반올림하는 것으로 나타 났으며 워크 시트 라운드 함수는 1. 이상하게도 VBA 라운드 함수는 1.5에 대해 2를 반환합니다. VBA 대신 워크 시트 기능을 대체해야했습니다.

내가 뭔가를 놓치고 있습니까?

도움이 되었습니까?

해결책

알려진 문제입니다. VBA Round () 함수는 Banker의 반올림을 사용하고 스프레드 시트 셀 기능은 산술 반올림을 사용합니다. 여기에서 세부 사항을 확인하십시오.

PRB : VBA 6 및 Excel 스프레드 시트에서 다른 라운드 기능

Microsoft가 제안한 해결 방법은 원하는 결과를 얻기 위해 사용자 정의 기능을 작성하는 것입니다.

은행가의 반올림 항상 0.5를 가장 가까운 곳으로 반올림합니다 조차 숫자와 회계의 표준이므로 Excel이 그런 방식으로 작동하는 이유입니다. 산술 반올림 다음 숫자까지 0.5로 반올림합니다.

다른 팁

당신은 이것에 대해 Microsoft를 비난 할 수 있습니다. http://support.microsoft.com/kb/194983

주변의 방법 목록은 다음과 같습니다. http://www.excelforum.com/excel-programming/401104-worksheet-rounding-vs-vba-rounding.html

질문은 완전히 대답했습니다 여기 여기에 복사했습니다 (저자의 허가에 의해 :) :

VBA 라운드 기능은 은행원의 반올림을 사용하여 .5를 짝수로 짝수로 사용합니다.

Round (12.55, 1) would return 12.6 (rounds up) 
Round (12.65, 1) would return 12.6 (rounds down) 
Round (12.75, 1) would return 12.8 (rounds up)   

Excel 워크 시트 기능은 항상 .5를 둥글게합니다.

나는 일부 테스트를 수행했으며 .5 UP 반올림 (대칭 반올림)도 셀 포맷에 의해 사용되며 열 폭 형식 (일반 번호 형식을 사용할 때)에도 사용됩니다. '표시된 정밀도'플래그는 반올림 자체를 수행하는 것처럼 보이지 않으며 셀 형식의 둥근 결과 만 사용합니다.

반올림을 위해 VBA의 Microsoft에서 Symarith 함수를 구현하려고했지만 Fix는 58.55와 같은 숫자를 줄 때 오류가 있음을 발견했습니다. 58.6 대신 58.5의 결과를 제공하는 함수. 그런 다음 마침내 Excel 워크 시트 라운드 기능을 사용할 수 있음을 발견했습니다.

application.round (58.55, 1)

이렇게하면 VBA에서 정상적인 반올림을 수행 할 수 있지만 일부 사용자 정의 기능만큼 빠르지는 않습니다. 나는 이것이 질문에서 완전한 원을 받았다는 것을 알고 있지만 완전성을 위해 그것을 포함시키고 싶었다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top