문제

499, 73433, 2348과 같은 숫자가 주어지면 가장 가까운 5 또는 10으로 반올림하는 데 어떤 VBA를 사용할 수 있습니까? 아니면 임의의 번호?

5로 :

 499 ->  500
2348 -> 2350
7343 -> 7345

10, 10, : 10.

 499 ->  500
2348 -> 2350
7343 -> 7340

등.

도움이 되었습니까?

해결책 2

통합 답변

X = 1234 'number to round
N = 5    'rounding factor
round(X/N)*N   'result is 1235

정수에 대한 플로팅 포인트, 1234.564 ~ 1235의 경우 (이것은 VB 구체적이며, 대부분의 다른 언어는 단순히 단순히 자릅니다) :

int(1234.564)   'result is 1235

조심하십시오 : VB 사용 은행가 반올림, 가장 가까운 짝수로, 당신이 그것을 모른다면 놀랍습니다.

msgbox round(1.5) 'result to 2
msgbox round(2.5) 'yes, result to 2 too

모두 감사합니다.

다른 팁

간단한 수학입니다. 숫자 X와 반올림 계수 n이 주어지면 공식은 다음과 같습니다.

둥근 (x / n)*n

가장 가까운 X로 반올림하려면 (VBA별로)

n = x * int (n / x + 0.5)

여기서 int (...)는 다음으로 가장 낮은 정수를 반환합니다.

사용 가능한 반올림 기능이 이미 반올림하는 경우 가장 가까운 정수는 0.5의 추가를 생략합니다

VB에서 Math. Round에는 소수점 이하의 장소 및 반올림 방법을 지정하는 추가 인수가 있습니다. Math.Round (10.665, 2, MidPointrounding.Awayfromzero) 10.67을 반환합니다. 숫자가 10 진수 또는 단일 데이터 유형 인 경우 Math.round는 소수점 데이터 유형을 반환합니다. 이중이면 이중 데이터 유형을 반환합니다. 옵션 strict가 켜져 있으면 중요 할 수 있습니다.

(10.665) .ToString ( "N2")의 결과는 0에서 멀어져 "10.67"을 제공합니다. 추가 인수가 없으면 Math.round는 10.66을 반환하여 원치 않는 불일치로 이어질 수 있습니다.

'예 : 라운드 499에서 가장 가까운 5. 라운드 () 함수를 사용합니다.

a = inputbox("number to be rounded")
 b = inputbox("Round to nearest _______ ")


  strc = Round(A/B)
  strd = strc*B


 msgbox( a & ",  Rounded to the nearest " & b & ", is" & vbnewline & strd)

엄격한 시각적 기본 접근법을 위해, 부동 소수점 값을 정수로 변환하여 정수로 반올림 할 수 있습니다. VB는 유형 변환에 반올림하는 드문 언어 중 하나입니다 (대부분의 다른 사람들은 단순히 단순히 잘립니다.)

5 또는 X의 배수는 라운드 후에 나누고 곱하여 간단하게 수행 할 수 있습니다.

둥글고 소수점을 유지하려면 Math.Round (n, d)가 작동합니다.

다음은 우리의 해결책입니다.

Public Enum RoundingDirection
    Nearest
    Up
    Down
End Enum

Public Shared Function GetRoundedNumber(ByVal number As Decimal, ByVal multiplier As Decimal, ByVal direction As RoundingDirection) As Decimal
    Dim nearestValue As Decimal = (CInt(number / multiplier) * multiplier)
    Select Case direction
        Case RoundingDirection.Nearest
            Return nearestValue
        Case RoundingDirection.Up
            If nearestValue >= number Then
                Return nearestValue
            Else
                Return nearestValue + multiplier
            End If
        Case RoundingDirection.Down
            If nearestValue <= number Then
                Return nearestValue
            Else
                Return nearestValue - multiplier
            End If
    End Select
End Function

용법:

dim decTotal as Decimal = GetRoundedNumber(CDec(499), CDec(0.05), RoundingDirection.Up)

단순히 둥글 (x/5)*5는 작업을 수행해야합니다.

나는 주석을 추가 할 수 없으므로 이것을 사용할 것입니다

VBS에서는 그것을 실행하고 2가 왜 2의 결과를 주는지 알아내는 재미를 느끼십시오.

당신은 라운드를 믿을 수 없습니다

 msgbox round(1.5) 'result to 2
 msgbox round(2.5) 'yes, result to 2 too

그런 것?

'nearest
 n = 5
 'n = 10

 'value
 v = 496
 'v = 499 
 'v = 2348 
 'v = 7343

 'mod
 m = (v \ n) * n

 'diff between mod and the val
 i = v-m


 if i >= (n/2) then     
      msgbox m+n
 else
      msgbox m
 end if

이 기능을 시도하십시오

--------------시작----------------

Function Round_Up(ByVal d As Double) As Integer
    Dim result As Integer
    result = Math.Round(d)
    If result >= d Then
        Round_Up = result
    Else
        Round_Up = result + 1
    End If
End Function

-------------끝 ------------

나는 "커뮤니티 위키 (Community Wiki)"(최선의 답변)에서 제공 한 함수를 약간 업데이트했으며,이 예외를 제외하고 가장 가까운 5 (또는 좋아하는 것)로 반올림했습니다. 둥근 번호는 원래 번호보다 우월하지 않습니다..

이것은 "회사는 47 년 동안 살아있다" : 웹 페이지가 표시되기를 원합니다 "45 년 이상 살아있다", 진술에 누워있는 것을 피하면서 "50 년 이상 살아있다".

따라서이 기능을 47로 공급하면 50을 반환하지는 않지만 대신 45 번 반환됩니다.

'Rounds a number to the nearest unit, never exceeding the actual value
function RoundToNearestOrBelow(num, r)

    '@param         num         Long/Integer/Double     The number to be rounded
    '@param         r           Long                    The rounding value
    '@return        OUT         Long                    The rounded value

    'Example usage :
    '   Round 47 to the nearest 5 : it will return 45
    '   Response.Write RoundToNearestBelow(47, 5)

    Dim OUT : OUT = num

    Dim rounded : rounded = Round((((num)) / r), 0) * r

    if (rounded =< num) then
        OUT = rounded
    else
        OUT = rounded - r
    end if

    'Return
    RoundToNearestOrBelow = OUT

end function 'RoundToNearestOrBelow

Visual Basic에서 라운드 기능이 Excel에서 작동하는 방식을 모방하려면 WorksheetFunction.round (번호, 소수)를 사용하면됩니다.

이런 식으로 은행 또는 회계 반올림은 반올림을하지 않습니다.

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