VBA相当于Excel的mod函数

问题描述 投票:0回答:9

有没有相当于excel的

mod
功能的vba?

excel vba excel-2007 modulo
9个回答
60
投票

在vba中该函数是MOD。 例如

 5 MOD 2

这是一个有用的链接


37
投票

您需要 mod 运算符

The expression a Mod b is equivalent to the following formula:

a - (b * (a \ b))

编辑添加:

您可能需要考虑一些特殊情况,因为 Excel 使用浮点数学(并返回

float
),而 VBA 函数返回整数。因此,将
mod
与浮点数一起使用可能需要额外注意:


10
投票

我在 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

在您的 VBA 模块中


9
投票

使用 Excel MOD(a,b) 函数和 VBA a 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


3
投票

Mod
运算符,大致相当于
MOD
函数
:

number Mod divisor
大致相当于
MOD(number, divisor)


2
投票
Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
    Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function

此函数始终有效,并且是 Excel 函数的精确副本。


0
投票

但是,如果您只想区分奇数迭代和偶数迭代之间的区别,那么这很好用:

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

0
投票

如果 excel 的 mod 函数也给出不正确的结果,我发现这是最可靠的:

原本均匀 XLMod = (a - (b * Int(a / b))) 给了我不正确的结果,所以..

Function XLMod(a, b As Long)
' This replicates the Excel MOD function - the VBA mod function returns an integer

Dim templong As Long

  templong = (b * Int(a / b))
  XLMod = (a - templong)
End Function

-1
投票

最上面的答案实际上是错误的。

建议的方程:

a - (b * (a \ b))

将解决:

a - a

当然在所有情况下都是 0。

正确的方程式是:

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

或者,如果数字 (a) 可以为负数,请使用:

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

© www.soinside.com 2019 - 2024. All rights reserved.