2016-04-15 10 views
1

私は、月間リターンデータに基づいて3年間のローリングリターンの計算を自動化するプロセスを開発しています。エラーを生成するコードの一部を次に示します。成功した計算後のランタイムエラー5

Set rolling_returns = Range([c41], [c41].End(xlDown)) 

start_no_begin = 6 
start_no_end = 41 

For Each calc In rolling_returns 

reference_begin = "C" & start_no_begin 
reference_end = "C" & start_no_end 

    Set calculation1 = Range(reference_begin, reference_end) 

    calc.Offset(0, 3) = ((WorksheetFunction.Product(calculation1)) - 1)^(1/3) 
    'why is this getting stopped after a certain amount of calculations?? 

    start_no_begin = start_no_begin + 1 
    start_no_end = start_no_end + 1 

Next 

私のコードは175回反復して実行され、エラーが発生します。手動で計算を再現しました。エラーはないので、データの問題ではないと思います。メモリの問題かもしれませんか?

+0

開始値と終了値と比較してループ値を問題にすることができますか?calc = 174までコードをステップ実行し、その変数値をすべて確認してから、もう一度ステップを実行してください。 – Davesexcel

+0

私はそれを試しましたが、問題の原因がどこにあるのかまだ分かりません。すべての変数は正しい値を持っていますが、それ以上は進まないでしょう。しかし、入力をありがとう。 – clysaght62

+0

私は問題を診断したと思います。指数が整数でない場合、Excel VBAは指数を計算するのが難しいと思います。私は指数関数的な問題を具体的に見た後、これを見つけました:http://stackoverflow.com/questions/28390833/run-time-error-5-in-vba-excel-when-working-with-array – clysaght62

答えて

0

これをチェックしてください。thread out - 基本的には、分数指数を直接使用する代わりにWorksheetFunction.Power関数を使用できます。

calc.Offset(0, 3) = WorksheetFunction.Power(((WorksheetFunction.Product(calculation1)) - 1), 3) 

だからあなたのコードになるcalculation1の生産がゼロになる可能性があるため、あなたのコードは-1立方根を取るしようとしているのリスクを軽減しないと、あなたは1

を差し引きます

私はあなたのコードが処理しているデータ範囲の最下部に達したときに何が起こっているのかを調べることをお勧めします。ループの最後に向かって空のセルを取得する場合は、通常はWorksheetFunction.Product関数でスキップされますが、特定のルーチンで何が起きているかチェックする価値があります。

関連する問題