【问题标题】:VBA Function where double loop only provides one output双循环仅提供一个输出的VBA函数
【发布时间】:2018-10-08 02:55:19
【问题描述】:

我是 VBA 新手,正在尝试使用定义的参数从 -nn 进行三项式期权定价树。如何使用双循环重写我的 VBA 函数以提供所有输出,因为它似乎只显示 S 的值。最后,我想对所有值求和并对其进行折扣,但我无法通过仅提供一个输出的双循环。如果我将 MsgBox 放在 ki 循环之间,它不会返回任何内容。由于我还没有 VBA 的窍门,请有人帮忙让它工作。

Public Function LoopTest(S As Double, u As Double, n As Integer)

    Dim i As Integer
    Dim j As Integer
    Dim k As Integer

    Dim St() As Double
    ReDim St(2 * n + 1)

    For k = 0 To n Step 1
        For i = -k To k Step 1
            St(i, k) = S * u ^ i
            Debug.Print St(i, k)
            MsgBox ("DebugToPrint")
            ' Payoff(i,k) = Application.WorksheetFunction.Max((St(i,k) - 20), 0)
        Next i
    Next k

    ' For i from n to 2 step -1
    ' For j from 1 to n - 2
    '     Payoff(i - 1, j) = Payoff(i, j) + Payoff(i, j + 1) + Payoff(i, j + 2)
    ' Next i
    ' Next k

    LoopTest = St()

End Function

我如何获得输出

k=0 St = S*u^0 k=1 St = S*u^-1 , St = S*u^0 , St = S*u^1 k=2 St = S*u^-2 , St = S*u^-1 , St = S*u^0 , St = S*u^1 , St = S*u^2

等,然后将所有内容相加作为输出?

【问题讨论】:

  • 看起来你在正确的轨道上,但ReDim St(2 * n + 1) 只给你一个一维数组。那不应该更像ReDim St(2 * n + 1, n)吗?
  • 应该是Redim St(-n To n, 0 to n)
  • 非常感谢克里斯!这很好用。现在说得通了,但我以前并不真正了解 ReDim,但这有效,现在让我明白了。我真的很感激这个

标签: vba excel function loops


【解决方案1】:

我并不完全遵循这个例子,但从描述中听起来你对递归过程很感兴趣。如果您不小心,这可能会很棘手,并且会让您陷入无休止的循环。这个之前的帖子对你有帮助吗? VBA recursive "For loops" Permutation?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多