VBA相当于Excel的mod函数

时间:2010-12-07 14:59:51

标签: excel-vba excel-2007 vba excel

是否存在与excel的mod函数相当的vba?

8 个答案:

答案 0 :(得分:55)

在vba中,函数是MOD。 e.g

 5 MOD 2

这是一个有用的link

答案 1 :(得分:34)

您需要mod operator

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

a - (b * (a \ b))

已编辑添加:

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

  • Excel的结果可能与您预测的结果不完全一致;我们会简要介绍here (see topmost answer)并详细介绍here

  • 正如@André在评论中指出的那样,负数可能会与您的预期相反。他建议的Fix()函数解释为here (MSDN)

答案 2 :(得分:8)

我在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
模块中的

答案 3 :(得分:7)

对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和 在VBA中:((90.123 * 1000)Mod 90000)/ 1000也返回0.123

答案 4 :(得分:3)

Mod operator大致相当于MOD function

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

答案 5 :(得分:0)

最重要的答案实际上是错误的。

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

将解决:a - a

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

正确的等式是:

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

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

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

答案 6 :(得分:0)

但是如果你只想告诉奇数迭代和偶数迭代之间的区别,这很好用:

If i Mod 2 > 0 then 'this is an odd 
   'Do Something
Else 'it is even
   'Do Something Else
End If

答案 7 :(得分:0)

Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
    Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function

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