繁体   English   中英

VBA 相当于 Excel 的 mod function

[英]VBA equivalent to Excel's mod function

是否有一个 vba 相当于 excel 的mod function?

在vba中,函数是MOD。 例如

 5 MOD 2

这是一个有用的链接

你想要mod运算符

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

a - (b * (a \ b))

编辑添加:

您可能需要考虑一些特殊情况,因为Excel使用浮点数学(并返回一个float ),VBA函数返回一个整数。 因此,使用带有浮点数的mod可能需要额外注意:

我在VBA中复制Excel的MOD(a,b)在VBA中使用XLMod(a,b) ,其中包含函数:

Function XLMod(a, b)
    ' This replicates the Excel MOD function
    XLMod = a - b * Int(a / b)
End Function

在您的VBA模块中

使用Excel MOD(a,b)函数和VBA和Mod b运算符时要非常小心。 Excel返回浮点结果,VBA返回整数。

在Excel = Mod(90.123,90)中返回0.123000000000005而不是0.123在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

Mod运算符大致相当于MOD函数

number Mod divisor大致相当于MOD(number, divisor)

最佳答案实际上是错误的。

建议的等式: a - (b * (a \\ b))

将解决: a - a

在所有情况下,当然是0。

正确的等式是:

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

或者,如果数字(a)可能是负数,请使用:

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

但是,如果您只是想区分奇数迭代和偶数迭代之间的区别,这可以正常工作:

If i Mod 2 > 0 then 'this is an odd 
   'Do Something
Else 'it is even
   'Do Something Else
End If
Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
    Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function

此功能始终有效,并且是Excel功能的精确副本。

如果 excel 的 mod function 也给出不正确的结果,我发现这是最可靠的:

最初甚至 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM