[英]Dynamic Arrays in VBA/Excel
我一直在寻找StackOverflow,但是似乎找不到这个问题的答案。 我正在尝试为金融中的最小方差投资组合计算实现一些公式。 我正在尝试在VBA中执行此操作。
现在,我正在尝试构建一个简单的函数,该函数将向量作为参数,并使用1个向量进行浓缩(即结果将是具有n行和2列的数组)。 我的想法是,我希望能够接受任何长度的输入并且仍然具有工作功能。
[ mu1 1 ]
[ mu2 1 ]
[ mu3 1 ]
我一直在尝试不同的编码解决方案,但似乎都没有用。 我认为问题在于动态数组。 这是我的代码
' MIN VARIANCE CALCULATIONS AND CAPM
Public Function MuConc(mu As Variant) As Variant
Dim i As Long
Dim temp() As Variant
For i = 1 To UBound(mu)
ReDim Preserve temp(1 To i, 1 To 2)
temp(i, 1) = mu(i)
temp(i, 2) = 1
Next i
MuConc = temp
End Function
由于循环内的Redim占用大量性能,因此我也尝试过
' MIN VARIANCE CALCULATIONS AND CAPM
Public Function MuConc(mu As Variant) As Variant
Dim i,n As Long
n = ubound(mu)
Dim temp() As Variant
ReDim temp(1 to n, 1 to 2)
For i = 1 To n
temp(i, 1) = mu(i)
temp(i, 2) = 1
Next i
MuConc = temp
End Function
谁能看到错在哪里? Mu是要包含1个向量的向量。 先感谢您!
不,没有错。 我写了以下测试,它工作正常:
Public Sub test()
Dim mu() As Variant
Dim i, j
ReDim mu(1 To 5)
mu(1) = 1
mu(2) = 2
mu(3) = 3
mu(4) = 4
mu(5) = 5
mu = MuConc(mu)
i = 0
i = i + mu(1, 2)
i = i + mu(2, 2)
i = i + mu(3, 2)
i = i + mu(4, 2)
i = i + mu(5, 2) ' i is now 5
j = 0
j = j + mu(1, 1)
j = j + mu(2, 1)
j = j + mu(3, 1)
j = j + mu(4, 1)
j = j + mu(5, 1) ' j is now 15
End Sub
Public Function MuConc(mu As Variant) As Variant
Dim i, n As Long
Dim temp() As Variant
n = UBound(mu)
ReDim temp(1 To n, 1 To 2)
For i = 1 To n
temp(i, 1) = mu(i)
temp(i, 2) = 1
Next i
MuConc = temp
End Function
我找到了解决方案。 我没有使用ubound(mu),而是使用range.Rows.Count函数保存了mu向量的大小。 结果代码是
Public Function MuConc(mu As Variant) As Variant
Dim i, n As Long
Dim temp() As Variant
n = mu.Rows.Count
ReDim temp(1 To n, 1 To 2)
For i = 1 To n
temp(i, 1) = mu(i)
temp(i, 2) = 1
Next i
MuConc = temp
End Function
这将范围“ mu”作为输入,向其添加一列1,然后输出结果的“矩阵”。
谢谢大家的帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.