我想在我的 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 也返回相同的结果)
关于vba - 函数 MOD 上的 Excel 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37966384/