2017-06-28 6 views
0

私はVBAで作業しています。私は非常に初心者です。私は基本的に、独立変数(MSCI Value、Growth and Small Cap)として機能する3列のデータと、その後にファンドデータ(従属変数)を含む多数の列が続く空白列を持っています。これらのほとんどは行数は同じですが、いくつかの行数は同じではありません。ネストループ内での線形関数の使用

私はLinest FunctionをExcelで使用して、独立した変数ごとに別々のファンドの係数(ベータ)を生成することを検討しています(MSCI成長、価値、スモールキャップ)。私は自分のデータとVBAを設定する最良の方法は何か分かりません。思考/アイデアは高く評価されます。

現在のところ私の考えはネストされたループです。最初の従属変数(列6)に対して最初の独立変数(MSCI Growth、列2)を回帰するためにLinest関数を使用し、範囲内のこの列番号は、列が空白になるまで増分されます)、これが起きたときに最初のファンドにループバックしますが、次の独立変数(MSCI Value、列3)に変更されます。このプロセスは、最後の独立変数(MSCI Growth、第4列)が最後のファンドに対して回帰されるまで繰り返されます。

これまでのところ、1)名前付き範囲を使用してLinest関数を作成していました。 2)ループの結果が配置されるテーブルを作成しています。

Set StartCell = Range("B9") 

LastRow = Cells(Rows.Count, 1).End(xlUp).Row 

Set gRange = Range(StartCell, Cells(LastRow, 2)) 'MSCI growth range 

Range("M21").value = Evaluate("Linest(gRange,G9:G112)") 'column G contains the first fund. 

このコードは実行されません、私はそれが配列の数式とは関係があると思います、私は係数が必要なので、全体の配列を実行する必要はありません。

私はセル参照を使用してみましたが、私は、私は#VALUE

Range("M22").value = Evaluate("Linest(Range((cells(9,2):cells(112,2)),Range(cells(9,7):cells(112,7)))") 

は、たぶん私はこのことについて間違った道を進んでいましたコードを実行したときに、私は他のシート上で使用できるグローバルなマクロを作成したいが、私はその課題にどのようにアプローチするのか不明です。

答えて

1

引用符からvbaの部分を削除して連結する必要があります。

ActiveSheet.Range("M21").value = ActiveSheet.Evaluate("Linest(" & gRange.Address(0,0) & ",G9:G112)")(1) 

第二1:

With ActiveSheet 
    .Range("M22").value = .Evaluate("Linest(" & .Range(.cells(9,2),.cells(112,2)).Address(0,0) & "," & .Range(.cells(9,7),.cells(112,7)).Address(0,0) & ")")(1) 
End With 

二つの範囲が同じサイズでない場合、これもエラーになります。だから彼らがいることを確認してください。

関連する問題