使用VBA函数划分矩阵

问题描述 投票:1回答:1

VBA非常新,如果这是一个非常简单的问题,请道歉。这与财务/投资组合管理有关。

我想创建一个VBA函数,它可以给我一组资产的全局最小方差投资组合(GMVP)权重,只有资产的方差 - 协方差矩阵。

我能够将这个公式直接键入Excel中的单元格来获得权重:= MMULT(MINVERSE(S),Ones)/ SUM(MMULT(MINVERSE(S),Ones))其中S是方差 - 协方差矩阵和1是包含“1”的列矩阵

映射矩阵的维数没有问题(如果S是5x5则那么将是5x1)

我一直在尝试制作VBA功能,这样我每次都不需要输入冗长的公式来找到GMVP。这是我的代码。在此之前,我还尝试用很长的单行编写所有内容,使用“/”来划分(不起作用)

我想知道是不是因为我们不能用“/”来分隔VBA中的矩阵?有没有办法让公式成为一个函数?

谢谢!

Function GMVPcol(S As Range, Ones As Range) As Range
Dim num As Range
Dim dem As Range

num = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(S), Ones)
dem = Application.WorksheetFunction.Sum(Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(S), Ones))

GMVPcol = Application.WorksheetFunction.MMult(num, Application.WorksheetFunction.MInverse(dem))

End Function
excel vba matrix
1个回答
1
投票

如果你极其简化你的公式,就像这样:

enter image description here

那么,这是将其表示为VBA函数并在Excel中调用它的正确方法:

Public Function SimpleMultiplication(matrix1 As Range, matrix2 As Range) As Variant
    SimpleMultiplication = WorksheetFunction.MMult(matrix1, matrix2)
End Function

该函数返回变量,而不是范围。在您的代码中,当要分配类型为range的对象时,请确保始终使用关键字Set。一般来说,如果你想通过一个中间范围并分配它,那么最好使用一个数组并从那里取数字 - Creating an Array from a Range in VBA

© www.soinside.com 2019 - 2024. All rights reserved.