0

共分散計算に関するヘルプ/ガイダンスが必要です。以下に、10 年間の株式データの共分散を計算する手順を書きました。問題は、添え字が範囲外であることを示すエラーが発生することです。私が関数を呼び出す方法は

CalcCovarAll firstColPick:=17、SecColPick:=17、ColPrint:=42

'firstColPick は、最初の列ピックのアドレスです

'secColPick は 2 番目の列ピックのアドレスです

'colPrint は、セルの特定の列に出力を印刷することです。

迅速なヘルプは非常に役立ちます。私は機能を正しく実装していないと思います

Sub CalcCovarAll(ByVal firstColPick As Integer, ByVal SecColPick As Integer, ByVal   ColPrint As Integer)
Dim secondPick As Range
Dim secondValue As Variant
Dim firstPick As Range
Dim firstValue As Variant
Dim wksSheet As Worksheet

Dim rowPrint As Range
Dim cvaluePrint As Variant

Dim Row As Integer
Dim col As Integer

'setting up the active worksheet
Set wksSheet = Workbooks("VaR_cw2 (2).xlsm").Worksheets("Sheet1")
'setting up the pickup of first column
Set firstPick = Range(Cells(4, firstColPick), Cells(2873 + 1, firstColPick))
firstValue = firstPick.Value

'setting up pickup of second column
Set secondPick = Range(Cells(4, SecColPick), Cells(2873 + 1, SecColPick))
 secondValue = secondPick.Value
'setting up column printing
Set rowPrint = Range(Cells(5, ColPrint), Cells(2873 + 1, ColPrint))
cvaluePrint = rowPrint.Value

 For Row = LBound(secondValue) To UBound(secondValue) - 1
    cvaluePrint(Row + 1, 1) = Application.Covar(firstValue, secondValue)
Next Row

rowPrint = cvaluePrint
End Sub
4

3 に答える 3

0

変化する

cvaluePrint(Row + 1, 1) = Application.Covar(firstValue, secondValue)

cvaluePrint(Row, 1) = Application.Covar(firstValue, secondValue)

since UBound(cvaluePrint) = 2870、 so whenは、 for ループの最後の反復でバリアントの上限を超えてRow = 2870います。Row + 1cvaluePrint

于 2013-07-04T10:53:57.663 に答える
0

rowPrint は 5 行目から始まり、secondPick は 4 行目から始まります。これは、cvaluePrint が secondValue より小さい項目に含まれていることを意味します。

cvaluePrint (1 ~ 2870) (5 ~ 2874 - VBA のすべての配列は 5 ではなく 1 から始まります)

secondValue (1 ~ 2871) (4 ~ 2874 - VBA のすべての配列は 4 ではなく 1 から始まります)

Row ループを実行すると、1 から 2870 になりますが、cvaluePrint(Row + 1, 1) と入力すると、2 から 2871 まで呼び出されます。最後の Row は範囲外です。cvaluePrint(Row, 1) を使用

于 2013-03-20T16:44:26.950 に答える
0

以下の行でエラーが発生する場合は、ファイル名が正しいこと、およびファイルがハード ドライブに存在し、開いていることを確認してください。

Set wksSheet = Workbooks("VaR_cw2 (2).xlsm").Worksheets("Sheet1")

コードの上でOption Base 1を使用し、以下の行を変更します

For Row = LBound(secondValue) To UBound(secondValue) 
    cvaluePrint(Row + 1, 1) = Application.Covar(firstValue, secondValue)
Next Row

また、入力変数が 0 より大きいことを確認してください。

今後、エラーについて質問を投稿する際は、行番号も指定してください。できればスクリーンショット。これにより、クエリをより迅速に解決できます。

于 2013-03-20T18:55:21.323 に答える