将 for 循环中每个步骤产生的单个值存储在数组中 VBA

Store in array single value produced by each step in a for loop VBA

我正好遇到了本次讨论中所述的问题:

Storing and Printing values in Array - VBA

但我需要通过调试查看它们,而不仅仅是打印它们。

基本上,我创建了这段代码:

Sub Montecarlo()

Dim X0, Xi, T, dt, m, s, Zi, dXi As Double
Dim ArraydXi() As Variant

X0 = 10
T = 5
dt = 1
m = 0.01
s = 0.2

n = T / dt

For i = 1 To n
    Zi = Application.WorksheetFunction.Norm_S_Inv(Rnd())
    dXi = m * dt + s * (dt) ^ (1 / 2) * Zi
    ArraydXi() = Array(dXi)
Next

SumElements = Application.WorksheetFunction.Sum(ArraydXi())

Xi = X0 + SumElements

End Sub

总之这里有两个问题:

1) 当我通过调试进入 ArraydXi() 时,我看到它只存储了 for 循环的最后一个(在本例中是第五个)dXi 值,而我想存储 for 循环每一步的所有五个 dXi 值和

2) 因此在 SumElements 变量中,没有应该存储到数组中的五个元素之和的踪迹。

请问有什么办法可以解决这个问题吗?

稍微猜测一下,但您没有声明 ArraydXi 的大小,因此您没有将每个值存储在单独的元素中。试试这个。

Sub Montecarlo()

Dim X0, Xi, T, dt, m, s, Zi, dXi As Double
Dim ArraydXi() As Variant

X0 = 10
T = 5
dt = 1
m = 0.01
s = 0.2

n = T / dt

ReDim ArraydXi(1 To n)

For i = 1 To n
    Zi = Application.WorksheetFunction.Norm_S_Inv(Rnd())
    dXi = m * dt + s * (dt) ^ (1 / 2) * Zi
    ArraydXi(i) = dXi
Next

SumElements = Application.WorksheetFunction.Sum(ArraydXi)

Xi = X0 + SumElements

End Sub

请告诉我这是否解决了问题。

Sub Montecarlo()

Dim X0, Xi, T, dt, m, s, Zi, dXi As Double
Dim ArraydXi() As Variant

X0 = 10
T = 5
dt = 1
m = 0.01
s = 0.2

n = T / dt

ReDim ArraydXi(n)
For i = 1 To n
    Zi = Application.Norm_S_Inv(Rnd())
    dXi = m * dt + s * (dt) ^ (1 / 2) * Zi
    ReDim Preserve ArraydXi(i)
    ArraydXi(i) = dXi
    Debug.Print ArraydXi(i)
Next

SumElements = Application.Sum(ArraydXi)

Xi = X0 + SumElements

End Sub