MOD 함수의 큰 숫자 (Microsoft Excel)
Cesarettin은 평가중인 숫자가 268,435,456 이상이고 제수가 2이면 MOD 워크 시트 함수가 결과를 생성 할 수 없다고 언급했습니다. 숫자가 이보다 작 으면 문제가 없습니다. 예를 들어 함수가 MOD (268435455, 2)이면 문제가 없습니다. 그는 더 큰 숫자와 2의 제수로 MOD 함수를 사용하는 방법이 있는지 궁금합니다.
문제는 실제로 Cesarettin이 제안하는 것보다 더 큽니다. Microsoft는이 문제에 대해 알고 있습니다. MOD가 사용하는 내부 공식의 문제에서 비롯된 것 같습니다. 여기에서 오류에 대한 자세한 정보를 찾을 수 있습니다.
http://support.microsoft.com/kb/119083
기본적으로 MOD 함수는 134,217,728을 곱한 제수 (MOD 함수의 두 번째 인수)가 평가중인 숫자 (MOD 함수의 첫 번째 인수)보다 작거나 같으면 오류를 반환합니다.
따라서 평가되는 숫자가 268,435,456이고 제수가 2, 평가되는 숫자가 402,653,184, 제수가 3, 평가되는 숫자가 536,870,912, 제수가 4 인 경우 문제가 발생합니다.
Microsoft에서 제안한 솔루션은 단순히 MOD 함수를 사용하지 않고 대신 다음 공식에 의존하는 것입니다.
=number-(INT(number/divisor)*divisor)
그러나 이것이 유일한 해결책은 아닙니다. 사용할 수있는 다른 공식적인 접근 방식도 있습니다. 예 :
=MOD(MOD(number,134217728*divisor),divisor)
이것은 MOD의 한계보다 훨씬 큰 숫자에 대해 해결되지만 이론적으로 평가되는 숫자가 134,217,728134,217,728 제수에 도달하면 동일한 문제가 발생합니다. 대부분의 경우이 한계는 도달 할 수 없을만큼 충분히 큽니다.
2로 나눈 숫자의 계수 만 구해야하는 경우 다음과 같은 방식으로 수식에 수표를 삽입 할 수 있습니다.
=MOD(IF(A1>=268435456,A1-268435456,A1),2)
이것은 평가되는 숫자 (이 경우 A1 셀)가 한계보다 큰지 확인하고, 계수를 계산하기 전에 숫자에서 한계를 뺍니다. 다음 공식을 사용하여 MOD 제한을 효과적으로 제거 할 수도 있습니다.
=MOD(MOD(number,2^16),2))
이것은 모듈로 2의 큰 숫자를 16 제곱 한 다음 모듈로 2의 결과 값을 취합니다. 숫자가 이진수로 표시되면 무슨 일이 일어나고 있는지 쉽게 알 수 있습니다. MOD (largenum, 2 ^ 16)은 모든 비트를 16 번째 이진수의 왼쪽으로 떨어 뜨립니다. 모듈로 2의 경우 결과를 결정하는 데 맨 오른쪽 숫자 만 필요하므로 값에 관계없이 삭제 된 비트는 결과에 영향을주지 않습니다.
물론 VBA에서 자신 만의 MOD 함수를 만들고 기본 제공 MOD 함수 대신 수식에 사용할 수도 있습니다.
Function DblMod(Dividend, Divisor) ' Declare two double precision variables Dim D1 As Double Dim D2 As Double ' Copy function arguments to local variables D1 = Dividend D2 = Divisor DblMod = D1 Mod D2 End Function
이 함수를 사용하면 VBA 함수에 두 개의 인수를 전달할 수 있습니다. 그런 다음 MOD 워크 시트 함수와 동일한 제한이없는 VBA Mod 함수에 의존합니다.
_ 참고 : _
이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.
link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요]
.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (3302)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다.