Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA相当于Excel';s模函数_Excel_Excel 2007_Vba - Fatal编程技术网

VBA相当于Excel';s模函数

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é在评论中指出的那样,负数可能与

是否有与excel的
mod
函数等效的vba?

在vba中,函数是mod。 e、 g

下面是一个有用的示例。

大致相当于:

number Mod divisor
大致相当于您想要的
Mod(number,divisor)

编辑以添加:

<> P>有一些特殊的情况您可能需要考虑,因为Excel使用浮点数学(并返回<代码>浮点),VBA函数返回一个整数。因此,将
mod
与浮点数一起使用可能需要特别注意:

  • Excel的结果可能与您的预测不完全一致;本文将简要而详细地介绍这一点

  • 正如@André在评论中指出的那样,负数可能与你的预期相反。他建议的
    Fix()
    功能已被解释


我在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模块中

使用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似乎在双精度上起作用。+1
Mod
的VBA语言参考页是Mod运算符不等效的,因为它不能返回浮点精度,这与excel函数不同。请注意,当使用负数时,excel Mod函数的计算方式与VBA Mod运算符不同。我刚刚用简单的整数发现了这一点。我希望在这一页上看到更多关于这个问题的解释。在VBA
11 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