VBA相当于Excel';s模函数
是否有与excel的VBA相当于Excel';s模函数,excel,excel-2007,vba,Excel,Excel 2007,Vba,是否有与excel的mod函数等效的vba?在vba中,函数是mod。 e、 g 下面是一个有用的示例。大致相当于: number Mod divisor大致相当于您想要的Mod(number,divisor) 编辑以添加: P>有一些特殊的情况您可能需要考虑,因为Excel使用浮点数学(并返回浮点),VBA函数返回一个整数。因此,将mod与浮点数一起使用可能需要特别注意: Excel的结果可能与您的预测不完全一致;本文将简要而详细地介绍这一点 正如@André在评论中指出的那样,负数可能与
mod
函数等效的vba?在vba中,函数是mod。
e、 g
下面是一个有用的示例。大致相当于:
number Mod divisor
大致相当于您想要的Mod(number,divisor)
编辑以添加:
<> P>有一些特殊的情况您可能需要考虑,因为Excel使用浮点数学(并返回<代码>浮点),VBA函数返回一个整数。因此,将mod
与浮点数一起使用可能需要特别注意:
- Excel的结果可能与您的预测不完全一致;本文将简要而详细地介绍这一点
- 正如@André在评论中指出的那样,负数可能与你的预期相反。他建议的
功能已被解释Fix()
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模块中使用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中:=四舍五入(Mod(90.123,90),3)返回0.123和
在VBA中:((90.123*1000)Mod 90000)/1000也返回0.123最上面的答案实际上是错误的 建议的方程式:
a-(b*(a\b))
将求解为:a-a
当然,在所有情况下都是0
正确的公式是:
a-(b*INT(a\b))
或者,如果数字(a)可以是负数,则使用以下方法:
a-(b*FIX(a\b))
但是,如果您只想区分奇数迭代和偶数迭代,这很好:
If i Mod 2 > 0 then 'this is an odd
'Do Something
Else 'it is even
'Do Something Else
End If
此函数始终有效,并且是Excel函数的精确副本。您最好更改
(a\b)
以获得修复(a/b)
。否则,您可能会遇到十进制参数的问题。用a=1.75
和b=1
试试你的公式,你就会明白我的观点。建议的公式是错误的,总是会产生0answer@PSVSupporter我想你把``操作符和/
混淆了。它们是不同的。\n和mod都是32位的和int似乎在双精度上起作用。+1Mod
的VBA语言参考页是Mod运算符不等效的,因为它不能返回浮点精度,这与excel函数不同。请注意,当使用负数时,excel Mod函数的计算方式与VBA Mod运算符不同。我刚刚用简单的整数发现了这一点。我希望在这一页上看到更多关于这个问题的解释。在VBA11 Mod-5=1
中,作为Excel的公式Mod(11,-5)=-4
在我的例子中,我决定使用本页上显示的XLMod()函数,而不是Mod VBA运算符。\n运算符与/operator不同\结果是表达式1除以表达式2的整数商,它丢弃任何余数,只保留整数部分。这就是所谓的截断。运算符(VisualBasic)返回完整的商,该商将余数保留在小数部分中-1正如厚颜无耻的查理所解释的,基于不正确的假设,这个答案具有误导性;如果您不确信,请尝试在VBA编辑器的即时窗口中输入Msgbox 3-(2*(3\2)),该编辑器将按预期从模函数返回1,而不是本海报中假定的0。虽然此答案可能是正确和有用的,如果您随附一些解释,以解释它如何帮助解决问题,则最好是这样。如果有一个变化(可能是无关的)导致它停止工作,并且用户需要了解它曾经是如何工作的,这在将来会变得特别有用。关于浮点结果有很多警告+1提供一个例子。
Function XLMod(a, b)
' This replicates the Excel MOD function
XLMod = a - b * Int(a / b)
End Function
If i Mod 2 > 0 then 'this is an odd
'Do Something
Else 'it is even
'Do Something Else
End If
Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function