是否存在与excel的mod
函数相当的vba?
答案 0 :(得分:55)
答案 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功能的精确副本。