Excel VBA函数失败,但公式在工作表中起作用

时间:2019-03-07 22:28:06

标签: excel vba user-defined-functions

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

1 个答案:

答案 0 :(得分:0)

缺少您的代码。据我所知,不需要循环,而且您是在mod之后而不是

之前进行分配

这似乎可以解决问题

Public Function NuFunc(InputX As Variant, DecX As Variant) As Variant
  NuFunc = ((InputX ^ 2) / DecX) Mod 400
End Function