2011-08-11 14 views
3

Iは次のようにパーセンタイル関数を使用してVBA内の配列(ARR1)に100000個の値のデータ・セットの99.5%パーセンタイルを計算しようとしている:WorksheetFunctionアレイサイズ制限

Pctile = Application.WorksheetFunction.Percentile(arr1, 0.995) 
Pctile = Application.WorksheetFunction.Percentile_Inc(arr1, 0.995) 

どちら作品とIタイプの不一致が続く(13)。

私は私の知る限りは、高性能でエクセル2010を使用してい

エクセル2000年以来、私はExcel 2007の array sizes when passing to macro limited by available memory以来 calculation limited by available memory認識していたとして、最大値の65536に配列サイズアップを制限する場合、コードは正常に動作しますサーバ。誰もこの問題が存在することを確認できますか?つまり、ワークシートへのパーセンテージを「手動で」計算したり、ワークシートに出力したり、計算したり、読み戻したりするためのvba関数を構築することが私の選択肢です。何か他の選択肢があり、何が最も速いでしょうか?

+3

「問題」を確認できます。 Excel 2007/2010であってもUDFから配列を返すときは配列サイズの制限があります。私もあなたのための他のリンクを持っていないので、これは単なるコメントです。最後に、UDF *からの戻り値の配列サイズ制限*が "利用可能なメモリ"によって制限されていることを示唆しているリンクをリンクで見ることができませんでした。 – jtolle

+0

大きなデータに行くと型キャストエラーが出る –

答えて

0

ここでは、Excel Percentile関数を模倣したClassic VBAの例を示します。非効率的である Straight Insertion方法のジーンの露光光で

Percentile and Confidence Level (Excel-VBA)

。私はこの答えを次のように編集しました:

私は、QuickSelectが大きなレコードで優れていると思われ、非常に効率的です。

参照:A C#実装が容易VBに変換されなければならないFast Algorithm for computing percentiles to remove outliers @見出すことができる

  1. Wikipedia.org: Quick Select
+2

注意!それは[直線挿入の並べ替え](http://en.wikipedia.org/wiki/Insertion_sort)を使用しています!直線挿入はN²ルーチンであり、小さなNの場合にのみ使用する必要があります。 N <20、N = 100000ではなく、それは非常に非効率的である。 –

+0

ありがとうJFC。私は可能な限りランタイムを最小限に抑えることに焦点を当てています。代替案を提案できますか? – kavmeister