是否有与excel的mod
函数相当的vba?VBA相当于Excel的mod功能
29
A
回答
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)。
42
3
的Mod
operator,是大致相当于MOD
function:
number Mod divisor
大致相当于MOD(number, divisor)
。
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
你最好把`(a \ b)`换成`Fix(a/b)`。否则,您可能会遇到小数参数问题。用`a = 1.75`和`b = 1`试试你的公式,你就会看到我的观点。 – 2013-07-25 16:01:51