2010-12-07 4 views

답변

30

당신은 mod operator을 원합니다. 추가

The expression a Mod b is equivalent to the following formula: 

a - (b * (a \ b)) 

편집 :

Excel에서 VBA 함수는 정수를 반환하는 부동 소수점 연산을 사용하여 (그리고 float을 반환) 때문에 당신이 고려해야 할 수있는 몇 가지 특별한 경우가있다. 이 때문에, 부동 소수점 숫자로 mod를 사용하여 특별한주의가 필요할 수 있습니다

  • Excel의 결과를 정확히 예측하는 것이 무엇과 일치하지 않을 수 있습니다

    ; 이것은 간단히 here (see topmost answer) 및 큰 길이 here에 적용됩니다.

  • @ André가 의견에서 지적한 바와 같이 음수는 예상 한 것과 반대 방향으로 반올림됩니다. 그가 제안하는 Fix() 기능은 here (MSDN)으로 설명됩니다.

+4

'(a/b) 수정 '의'(a \ b)'를 변경하는 것이 좋습니다. 그렇지 않으면 decimal 인수에 문제가있을 수 있습니다. 수식을'a = 1.75'와'b = 1'로 시도하면 내 요점이 보일 것입니다. –

+0

제안 된 공식이 잘못되어 항상 0을 대답으로 생성합니다. – PSVSupporter

+0

@PSVSupporter'\'연산자를'/'연산자와 혼동하는 것 같습니다. 그들은 다르다. – egrunin

42

기능은 MOD입니다. 예컨대

5 MOD 2 

여기에 유용한 link입니다.

+4

+1 'Mod'에 대한 VBA 언어 참조 페이지는 [여기]입니다. (http://msdn.microsoft.com/en-us/library/office/gg264708%28v=office.14%29.aspx) – barrowc

+0

mod 연산자는 Excel 함수와 달리 부동 소수점을 반환 할 수 없기 때문에 동등하지 않습니다. – johnzilla

7

복제에가는 길 엑셀의 VBA에서 MOD(a,b)는 기능이 (가) 있습니다 VBA에서 XLMod(a,b)을 사용하는 것입니다 : 당신의 VBA 모듈에

Function XLMod(a, b) 
    ' This replicates the Excel MOD function 
    XLMod = a - b * Int(a/b) 
End Function 

을 (

4

는 엑셀 MOD 매우 조심 a, b) 함수와 VBA a Mod b 연산자로 구성됩니다. Excel은 부동 소수점 결과를 반환하고 VBA는 정수를 반환합니다. 엑셀 = 모에서

(90.123,90)은 0.123000000000005 대신 VBA 90.123 모에서 0.123 90 명 0을 반환 그들은 확실히 동등하지 않은

반환! 등가

은 : Excel에서 : 라운드 (MOD는 (90.123,90) 3) VBA에서 0.123 및 복귀 = ((90.123 * 1000) 모 90000)/1000은 0.123

1

정상 복귀 대답은 실제로 잘못되었습니다.

제안 식 : 모든 경우에 당연히 0이다 a - a

: a - (b * (a \ b))

가 해결됩니다.그냥 말하고 싶은 경우

a - (b * FIX(a \ b))

+1

\ 연산자는 /운영자 결과 모든 나머지를 폐기하고 오직 정수 부분을 유지 expression2를로 나눈 expression2의 정수 몫이다 \ 과 동일하지 않다. 이것을 잘라내 기 (truncation)라고합니다. /Operator (Visual Basic)는 나머지 부분을 소수 부분으로 유지하는 전체 지수를 반환합니다. https://msdn.microsoft.com/en-us/library/0e16fywh.aspx –

0

을하지만 : 수 (a)는 음수가 될 수있는 경우, 이것을 사용,

a - (b * INT(a \ b))

또는 :

올바른 방정식은 이상한 반복과 균등 한 반복 사이의 차이는 잘 작동합니다.

If i Mod 2 > 0 then 'this is an odd 
    'Do Something 
Else 'it is even 
    'Do Something Else 
End If