vba - 函数 MOD 上的 Excel 错误

标签 vba excel

我想在我的 excel 文件中输入这个公式(最好是 VBA)。但是由于某种原因,当我将此函数放在我的公式栏中时出现错误:

#NUM! - Number Error

我的功能是:
=98-mod(2000000000123456*100;97))

但是当我只输入 10 位数字时,它就可以工作了。我需要使用 16 位数字。
我基本上是在尝试根据 ISO 7064 Mod 97,10 公式验证数字
提前致谢。

感谢人们的努力,但我尝试了@Robyn 编写的代码,但出现溢出错误。这是我的代码(我将只写函数部分):
'注:输入参数为:3259300700853850和97
 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

最佳答案

如前所述,Excel 有 15 位精度的限制。因此,当您输入上面的公式时,您的 16 位数字将被更改:
2000000000123456 变成 2000000000123460
解决此限制的一种方法是使用 VBA 并更改您的公式。

不要编写 16 digit number * 100 ,而是将整个值作为字符串输入:

“200000000012345600”

例如:

=98-xMOD("200000000012345600";97)

然后使用这个 UDF,它利用 VBA 的 Decimal 数据类型提供的更高的精度:
Option Explicit
Function xMOD(Num As Variant, Div As Long)
    Dim x As Variant, y As Variant

x = CDec(Num)
y = CDec(Div)

xMOD = x - Int(x / y) * y

End Function

如果您将在某个单元格中输入 16 位数字( 作为字符串 ),并且始终乘以 100,则可以使用以下公式:
=98-xMOD(C1&"00";97)

或者,您可以将 18 位数字 作为字符串 输入某个单元格并在公式中引用它,省略 &"00" 部分。

另一个选项,如果你能找到它,将是一个不受支持的免费插件,称为 xNumbers 。最新版本的 6.0 仍然适用于 Excel 2016,尽管不存在与功能区的集成,因此无法使用某些配置选项。

编辑 既然您写道您无法让此 UDF 在您的系统中工作,我将发布一个屏幕截图,显示它在我的系统中工作,并且它与您在赏金描述中发布的结果一致。 (来自 xNumbers 的 xIntMod 也返回相同的结果)

enter image description here

关于vba - 函数 MOD 上的 Excel 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37966384/

相关文章:

excel - 等待 shell 命令完成

Excel VLookup 具有多个结果,但不重复

regex - R 中的 LEFT 加 FIND 函数相当于什么?

python - 筛选 Excel 表格

excel - 如何复制一系列公式值并将其粘贴到另一张工作表中的特定范围?

ms-access - Microsoft Access 中的 Field 和 Field2 对象之间的主要区别是什么……?

vba - 有没有更有效的方法来计算数组的幂集?

vba - Excel 加载项从 ActiveWorkbook 调用子例程

vba - 我应该在退出子过程之前重新打开.CutCopyMode吗?

excel - 使用IF语句检查值