2017-03-23 16 views
3

ポートフォリオの推定std devをセルに返すマクロを作成しようとしています。しかし、株式の数が増えれば、彼らのコヴァーとそのウェイトは基本的に絶えず変化し、異なるポートフォリオで私はVBAでこれを望んでいます(私の最終的な目標は私の報告をできるだけ簡単にすることです)。ctrl shiftを入力して配列を入力します

私は + シフト + 、またはSQRの一部を入力しCTRLを理解するように見えることはできません。

私のコードを見てくださいよろしくお願いします。

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 

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

は(のための行列を取得するために(株式のは変動として、私はここにどのように多く、実際には各シェア(すなわち%の重み付け)値が含まれる行を見つけるん)株式のいないが、株式のpuchaseと販売に変更します。マトリックスは細胞内で開始する(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) 

として株式とのコバール(私はレンジ(「AG21」)に結果が欲しい)

RapportArk.Range("AG21").FormulaArray = MMult(Application.MMult(Region, Matrise), Application.Transpose(Region)) 

(すべて正常に動作しますが、#VALUEを返します。私はすべての

End Sub 
+1

あなたは 'ので、どこにでも式を入れていませんFormulaArray'とCtrl + Shift + Enterは適用されません。なぜそこに2つの 'MMult'呼び出しがありますか? – Rory

+0

コメントありがとうございます@Rory。灰。私のためにそれを解決:) – Mille

答えて

6

まずあなたがここにVBAで計算されていることはありません)CTRL + シフト + どちらも部分もマクロでSQRの一部を入力し得るように見えることができないようformulaであるが、valueである。そのほかに、私はすべてのあなたの計算を確認できませんでしたが、私はここでの問題を見ることができる:

Application.MMult(Region, Matrise)

寸法は行列乗算の規則を尊重しません。コードの解析から、は、Region1の列ベクトルで、MatriseRegion1 x Region1行列です。

行列の乗算は可換ではないことに注意してください。ほとんどの場合、あなたが望んでこれらのオペランドの順序を切り替えることである。

Application.MMult(Matrise, Region) 

これはあなたのサイズRegion1の列ベクトルを与えます。しかし、ベクトルRegionでドットプロダクトを作成したい場合は、ローベクトルが最初に来るはずですので、Transposeを2番目のオペランドには適用しないでください。だから、正しい文は次のようになります。

RapportArk.Range("AG21").value = _ 
    Application.MMult(Application.Transpose(Application.MMult(Matrise, Region)), Region) 

最後の操作は、2つのベクトルのdot-productあるので、あなたはおそらくSumProductを使用して、それを簡略化することができます。

RapportArk.Range("AG21").value = _ 
    Application.SumProduct(Application.MMult(Matrise, Region), Region) 
+1

それは素晴らしい作品!私はあなたが私がどれほど感謝しているか理解することはないと思います! :) ありがとうございました! – Mille

+1

あなたの時間を取って、回答を受け入れたものとしてマークしてください。 – ManishChristian

+0

@Millあなたを歓迎して、喜んで助けてください。 :) –

関連する問題