【问题标题】:Recursive VBA Function递归 VBA 函数
【发布时间】:2017-02-22 21:39:00
【问题描述】:

我正在尝试在 VBA 中编写一个递归函数,这样一旦我创建的函数开始增加,结果就会被限制在最低点。

目前我写的代码是:

Public Function function2(var1, var2, var3, var4)

temp = Application.WorksheetFunction.Max(var3- 1, 2)

function_temp = function1(var1,var2, temp, var4)


If function_temp < function1(var1, var2, var3, var4) Then function2= function_temp 

If function_temp >= function1(var1, var2, var3, var4) Then function2= function1(var1, var2, var3, var4)

End Function

这是数字的样子,而 Desired 列是我最终想要的。

Duration    Result  Current Desired

2   2.845   2.845   2.845

3   2.563   2.563   2.563

4   2.371   2.371   2.371

5   2.252   2.252   2.252

6   2.189   2.189   2.189

7   2.170   2.170   2.170

8   2.182   2.170   2.170

9   2.213   2.182   2.170

10  2.246   2.213   2.170

11  2.259   2.246   2.170

12  2.241   2.241   2.170

我意识到我需要使用递归函数,但我无法解决它。有什么想法吗?谢谢。

【问题讨论】:

  • 嘿 @dc2 ,如果这是在 excel 中,您可以使用 =min(cell1,cell2,cellAbove)... 可以吗?
  • 不,我需要用 VBA 编码,因为值会发生变化。
  • 所以我想我不明白你在做什么 - 你的数据在 excel 中吗?当前的和期望的?所以你在写一个UDF还是一个子?只是不清楚您要做什么...
  • 嗨,我用 VBA 编写的另一个函数正在输出数据。结果是该函数 (function1) 的输出。当前列是我的代码试图解决问题的当前输出。但是,我需要输出看起来像所需的列。
  • 我不确定我是否理解“结果限制在最低点”的意思。最低点是什么?此外,这是否被用作作为 UDF - 即您是否有在单元格公式中使用 function2 的单元格?

标签: excel vba recursion


【解决方案1】:

只是创建一个可以保存最小值的变量?比方说,minVar。

如果结果大于最小值,则使用 minVar。 如果结果低于最小值,则使用该值并覆盖 minVar。

Dim minVar as double
minVar = 999999    
If function_temp < function1(var1, var2, var3, var4) 
        Then  if function_temp < minVar
                 Then minVar = function_temp
               end if
         temp function2= function_temp
 end if

【讨论】:

  • 对,我会这样做,除了最小的变化,没有办法计算最小值。该公式有 4 个输入,因此最小值会根据输入而变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2015-03-01
  • 2020-04-28
相关资源
最近更新 更多