2017-06-26 5 views
1

Excelの表では、31列の数値データの15万行のセットがあります。 1列は30回の変数に対応し、5000回シミュレートされました。より正確には、最初の30行は最初のシミュレーションに対応します。 私は各変数の中央値を計算したいと思っています。つまり、計算する中央値は30 * 31です。私はこのコードを書いています:このVBAコードは無期限にループしていますか?

Function median_simulation() 
Dim feuille_statistiques As Worksheet, feuil1 As Worksheet 
Dim term As Integer 

Set feuil1 = Worksheets("Feuil1") 
Set feuille_statistiques = Worksheets("Statistiques") 


For i = 102 To 131 
    For j = 2 To 32 

     Dim rng2 As Range 
     term = feuille_statistiques.Cells(i, 1).Value 
     Set rng2 = feuil1.Range(feuil1.Cells(1 + term, (j + 5)), feuil1.Cells(1 + term, (j + 5))) 

     For k = 1 To 4999 
      Set rng2 = Union(rng2, feuil1.Cells(30 * k + 1 + term, (j + 5))) 
     Next k 

     feuille_statistiques.Cells(i, j).Value = WorksheetFunction.median(rng2) 

    Next j 
Next i 

End Function 

私は理由を知りませんが、このコードを実行しようとすると、決してコンピューティングが終わりません。しかし、私は、私はjとjを凍結するとき(私はj = 2と私は= 102で試してみた)コードが動作していると思うこれはいくつかのメモリの問題ですか?私のコードは最適ではないのですか?それを改善する方法はありますか?

+1

についてこれは、無限ループを引き起こすことはありませんが、あなたはループ内で何度もRNG2を調光するべきではありません。ループの外側でそれを一度宣言し、ループ内で繰り返し設定します。 – Jeeped

+0

@Jeepedありがとう、私はそれを試みるつもりです。 – Gannicus

+2

'median'は配列に作用するので、実際の範囲オブジェクトではなく配列を使用してください.'Dim a()As Variant:a =配列(1,5,10,11,12,13,500,7000): Debug.Print Application.WorksheetFunction.Median(a) ' –

答えて

0

medianは実際の範囲オブジェクトではなく配列を使用します。

Dim a() As Variant 
a = Array(1, 5, 10, 11, 12, 13, 500, 7000) 
Debug.Print Application.WorksheetFunction.Median(a) 

関連する問題