2010-12-07 139 views

回答

30

您想要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

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

+4

你最好把`(a \ b)`换成`Fix(a/b)`。否则,您可能会遇到小数参数问题。用`a = 1.75`和`b = 1`试试你的公式,你就会看到我的观点。 – 2013-07-25 16:01:51

42

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

5 MOD 2 

这里是一个有用的link

+4

+1`Mod`的VBA语言参考页是[here](http://msdn.microsoft.com/en-us/library/office/gg264708%28v=office.14%29.aspx) – barrowc 2013-07-25 21:39:54

+0

The mod运算符不是等价的,因为它不能像excel函数那样返回浮动精度。 – johnzilla 2016-09-21 15:35:04

7

我的方式来复制Excel的MOD(a,b)在VBA是使用VBA XLMod(a,b),你包括以下功能:在VBA模块

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

4

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

在Excel = MOD(90.123,90)返回0.123000000000005,而不是0.123 在VBA 90.123国防部90返回0

他们当然不等同!

等效为: 在Excel:= ROUND(MOD(90.123,90),3)返回0.123和 在VBA:((90.123 * 1000)模90000)/ 1000也返回0.123

1

顶答案其实是错误的。

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

将解决到:a - a

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

正确的公式是:

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

或者,如果数(A)可以是负的,使用此:

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

0

但如果你只是想告诉奇数迭代和偶数迭代之间的差异,这工作得很好:

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