将 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
我正好遇到了本次讨论中所述的问题:
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