programing

Excel의 mod 함수와 동등한 VBA

easyjava 2023. 4. 19. 23:33
반응형

Excel의 mod 함수와 동등한 VBA

엑셀과 동등한 vba가 있나요?mod기능하고 있습니까?

vba의 기능은 MOD입니다.

 5 MOD 2

여기 유용한 링크가 있습니다.

mod 연산자를 원합니다.

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

a - (b * (a \ b))

추가하도록 편집됨:

Excel은 부동소수점 연산을 사용하고 있기 때문에 고려해야 할 특별한 경우가 있습니다.floatVBA 함수가 정수를 반환합니다.이 때문에,mod부동소수점 숫자가 있는 경우는, 특히 주의가 필요한 경우가 있습니다.

  • Excel의 결과는 예상과 정확하게 일치하지 않을 수 있습니다.이것에 대해서는, 여기서 간단하게 설명합니다(상단의 회답 참조).

  • @André가 댓글에서 지적했듯이 마이너스 숫자는 예상과 반대 방향으로 반올림할 수 있습니다.Fix()여기서 설명하겠습니다(MSDN).

Excel을 복제하는 방법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

VBA 모듈에서

Excel MOD(a, b) 기능 및 VBA a Mod b 연산자는 매우 주의해야 합니다.Excel은 부동소수점 결과를 반환하고 VBA는 정수를 반환합니다.

Excel = Mod(90.123,90)에서 0.123 대신 0.1230000000005를 반환하고 VBA 90.123 Mod 90에서 0을 반환합니다.

그들은 확실히 동등하지 않다!

등가:Excel: =Round(Mod(90.123,90),3)는 0.123을 반환하고, In VBA: (90.123*1000) Mod 90000)/1000도 0.123을 반환합니다.

연산자는 대략 함수와 동일합니다.

number Mod divisor대략 와 동등하다MOD(number, divisor).

Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
    Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function

이 함수는 항상 작동하며 Excel 함수의 정확한 복사본입니다.

단, 홀수 반복과 짝수 반복의 차이만 구별하고 싶다면 다음과 같이 하면 됩니다.

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

Excel의 mod 함수에서도 잘못된 결과가 나온다면 이것이 가장 신뢰성이 높다는 것을 알게 되었습니다.

원래 XLMod = (a - (b * Int(a / b))조차 잘못된 결과를 주고 있었기 때문에..

Function XLMod(a, b As Long)
' This replicates the Excel MOD function - the VBA mod function returns an integer

Dim templong As Long

  templong = (b * Int(a / b))
  XLMod = (a - templong)
End Function

맨 위의 답은 사실 틀렸다.

권장 방정식:a - (b * (a \ b))

해결 대상:a - a

물론 모든 경우에 0입니다.

올바른 방정식은 다음과 같습니다.

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

또는 숫자(a)가 음수일 수 있는 경우 다음을 사용합니다.

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

언급URL : https://stackoverflow.com/questions/4378047/vba-equivalent-to-excels-mod-function

반응형