VBA for Excel中的奇怪数学错误
大家好,我希望收到我遇到的异常错误的反馈。
很奇怪。我有一个简单的公式,如果我 仅在普通工作表单元格中使用它并按列向下复制, 但是,如果我尝试在vba代码中执行简单的迭代以执行相同的功能,则会得到错误的值。
描述:一个数字被平方,然后除以另一个值
在0.99至1.99之间,接下来取模数,然后
该数字再次平方并重复整个公式。
如果我按列向下复制公式语句,则可以正常计算,
包括合理的十进制精度。
有四个输入; 基本值(输入x) decx =除数 修改值
放在(E2)的第一个公式如下; = MOD((((B2 ^ 2)/ $ B $ 3),$ B $ 4)
在(E3)中放置此语句; = MOD((((E2 ^ 2)/ $ B $ 3),$ B $ 4)
然后将此完全相同的语句逐列复制到接下来的98个单元格中。
都很好,没问题。似乎是正确的值,小数点后一位 精度,所有列单元格中都显示小数点后的值。
一些用于测试的样本输入值;
INPUTX-> 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
答案 0 :(得分:0)
缺少您的代码。据我所知,不需要循环,而且您是在mod之后而不是
之前进行分配这似乎可以解决问题
Public Function NuFunc(InputX As Variant, DecX As Variant) As Variant
NuFunc = ((InputX ^ 2) / DecX) Mod 400
End Function