2010-12-07 138 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