Excel VBA函数失败,但公式在工作表中有效
VBA for Excel中的奇怪数学错误 大家好,我很想得到关于我的错误的反馈 很奇怪。我有一个简单的公式,如果我 仅在普通图纸单元格中使用,并按列向下复制, 但是,如果我尝试在vba代码中进行简单的迭代来执行相同的函数,我会得到错误的值 描述:一个数字是平方,然后除以另一个值 在0.99到1.99之间,取下模量,然后 将数字再次平方,并重复整个公式。Excel VBA函数失败,但公式在工作表中有效,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,VBA for Excel中的奇怪数学错误 大家好,我很想得到关于我的错误的反馈 很奇怪。我有一个简单的公式,如果我 仅在普通图纸单元格中使用,并按列向下复制, 但是,如果我尝试在vba代码中进行简单的迭代来执行相同的函数,我会得到错误的值 描述:一个数字是平方,然后除以另一个值 在0.99到1.99之间,取下模量,然后 将数字再次平方,并重复整个公式。 如果我把公式语句按列复制下来,它就可以计算了, 包括合理的十进制精度 有四个输入; 基本值(输入x) decx=除数 模值 (E2)处的第一个
如果我把公式语句按列复制下来,它就可以计算了, 包括合理的十进制精度 有四个输入; 基本值(输入x) decx=除数 模值 (E2)处的第一个公式如下:=国防部((B2^2)/$B$3,$B$4) 在(E3)中,该陈述被放置=国防部((E2^2)/$B$3,$B$4) 然后,将完全相同的语句向下复制,逐列复制到下一个98个单元格 很好,没问题。从数值上看,它似乎是精确的,精确到小数点 精度,所有列单元格中显示超过小数点的值 用于测试的一些样本输入值 输入X-->231
DECX 1.010101
MOD 400
循环次数100 但当我尝试实现时,这是Excel VBA代码(Excel 2007) 我经常得到错误的值,绝对没有超过小数点的值 尝试使用各种不同的数据类型;单、双、变型等。。。但是我创建的VBA函数返回的所有值都会返回 整数,并且经常是错误的,肯定不符合 由简单的基于列的语句返回的值 曾试图找到解决方法,遇到“CDEC”,尝试 这一切都没有改变。完全被难住了,想了解一下 如果可以修复此问题,则函数循环返回相同的值 与基于列的语句和 非常感谢您对如何完成此任务的反馈 我在下面包括我的示例代码
Public Function SQRD(inputx As Variant, looptime As Variant, decx As Variant) As Variant
Application.Volatile
Dim Count As Integer
SQRD = CDec(inputx)
'Dim decx As variant
Count = 1
For Count = 1 To looptime
SQRD = CDec(SQRD ^ 2) '+ looptime
SQRD = CDec(SQRD Mod 400 / decx)
Next Count
End Function
你的代码有很多错误。就我所见,不需要循环,而且你在mod之后而不是之前分割 这似乎奏效了
Public Function NuFunc(InputX As Variant, DecX As Variant) As Variant
NuFunc = ((InputX ^ 2) / DecX) Mod 400
End Function
我将只介绍VBA
Mod
运算符的使用。它与ExcelMOD
函数不等价。特别是,VBAMod
运算符将在执行操作之前将浮点数舍入为整数
要使用模拟ExcelMOD
函数的VBA函数,请使用以下命令:
Function xlMOD(a As Double, b As Double) As Double
xlMOD = a - (b * (a \ b))
End Function
编辑
VBA中似乎存在错误(或文档错误)。在上面的公式中,\
运算符应该是整数除法运算符。它确实返回一个整数结果。但是,它不会截断,而是取整。实际上,它可能在返回结果之前对数字和除数执行VBA类型的舍入
因此,模拟ExcelMOD
函数的合适vba函数为:
Function xlMOD(a As Double, b As Double) As Double
xlMOD = a - Int(a / b) * b
End Function
您好,谢谢您的反馈-我明白您的意思,这很有帮助,我对此表示感谢,但这并不能解决问题。当函数以输入值“404.0404”运行100次迭代时,它返回不正确的值1,其中表列公式返回正确的值“72.18545607”UDF VBA函数没有保留任何超过小数点位置的值,也没有正确计算最终结果。我怀疑这与数据类型以及excel如何在VBA中处理计算器有关,但我无法确定如何解决此问题,因为我已尝试了所有已知的相关数据类型。很容易理解我的意思,简单地输入任何有理数的输入值,以及任何大于10的循环,电子表格使用基本的重复和复制我上面提到的列式语句;“放置在(E2)处的第一个公式看起来像;=MOD((B2^2)),$B$4)在(E3)中放置此语句;=MOD((E2^2)),$B$4)”然后将第100个单元格与函数的第100次迭代进行比较,证明了差异,我只希望函数返回与更麻烦的基于表/列的方法产生的值和精度相同的值和精度。因此,在您上面提供的代码片段中(非常感谢这一点)-我希望能够输入循环/迭代的数量,我不希望只获得输入的一个平方,但是我需要递归这个,同时保留精度和十进制值,而不是self。。不要回答一个问题然后上床睡觉:-)评论不用于长时间的讨论;这个对话已经结束了。嗨,Ron,我刚刚下载了Xnumbers for XP,并将在我的Excel 2007版本中试用它,看看会发生什么-可以这样问吗,您是否为Xnumbers编写了代码/脚本,比如一个mod函数以供测试?如果是的话,你能和我分享一下吗?