ctrl shift输入数组

Mil*_*lle 3 arrays excel vba

我正在尝试创建一个宏,将组合的估计std dev返回给单元格.然而,作为股票的一部分,他们的covar以及他们的权重将基本上不断变化,并且我想在VBA中使用不同的投资组合(我的最终目标是使我的报告尽可能简单).

我似乎无法理解ctrl+ shift+ enter或sqr部分.

你能看一下我的代码帮帮我吗?

Sub PorteføljeRisiko()
Dim RapportBok As Workbook
Dim RapportArk As Worksheet
Set RapportBok = Workbooks("Rapport kunder")
Set RapportArk = RapportBok.Sheets(1)

Dim Region1 As Long
Dim RegionA As Long
Dim Matrise As Range
Run Code Online (Sandbox Code Playgroud)

(由于股票的数量不同,我在这里找出实际包含一个值的行数(即每股的权重%))

Region1 = Application.WorksheetFunction.CountIf(RapportArk.Range("AC7:AC18"), "<>" & "")
RegionA = Region1 - 1 
Run Code Online (Sandbox Code Playgroud)

(获得股票之间的covar矩阵,因为股票的变化与购买和出售股票一起变化.矩阵从单元格开始(3,55)

SisteKolonne = RapportArk.Cells(RegionA + 3, RegionA + 55)

Set Matrise = RapportArk.Range(Cells(3, 55), Cells(3 + RegionA, 55 + RegionA))

Set Region = RapportArk.Range("AC7:AC" & Region1 + 6)
Run Code Online (Sandbox Code Playgroud)

(我希望结果在Range("AG21"))

RapportArk.Range("AG21").FormulaArray = MMult(Application.MMult(Region, Matrise), Application.Transpose(Region))
Run Code Online (Sandbox Code Playgroud)

(一切正常,除了返回#VALUE!因为我似乎无法获得宏中的ctrl+ shift+ enter部分和SQR部分)

End Sub
Run Code Online (Sandbox Code Playgroud)

A.S*_*S.H 6

首先,你在VBA中计算的不是一个formula而是一个value.除此之外,我无法验证您的所有计算,但我可以在这里看到一个问题:

Application.MMult(Region, Matrise)

尺寸不符合矩阵乘法的规则.从分析代码开始,Region是一个带有大小的列向量Region1,Matrise而是一个Region1 x Region1Matrix.

请记住,矩阵乘法不是可交换的.您最想要的是切换这些操作数的顺序:

Application.MMult(Matrise, Region)
Run Code Online (Sandbox Code Playgroud)

这将为您提供大小的列向量Region1.但是你想要一个带矢量的点积,Region再次,行矢量应该先行,所以你应该应用Transpose第一个操作数而不是第二个操作数.所以正确的陈述应该是:

RapportArk.Range("AG21").value = _
    Application.MMult(Application.Transpose(Application.MMult(Matrise, Region)), Region)
Run Code Online (Sandbox Code Playgroud)

由于最后一个操作是dot-product两个向量,您可以使用SumProduct以下方法简化它:

RapportArk.Range("AG21").value = _
    Application.SumProduct(Application.MMult(Matrise, Region), Region)
Run Code Online (Sandbox Code Playgroud)