是否有與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