Cesarettin指出,当计算的数字为268,435,456或更大且除数为2时,MOD工作表函数无法产生结果。如果数字小于此值,则没有问题。例如,如果函数为MOD(268435455,2),则没有问题。他想知道是否有一种方法可以使用较大数字和2的除数的MOD函数?

这个问题实际上比塞萨雷丁提出的要大。 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时,会出现问题。

微软建议的解决方案是不使用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函数。然后,它依赖于VBA Mod功能,该功能与MOD工作表功能没有相同的限制。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3302)适用于Microsoft Excel 97、2000、2002和2003。