3

次のようにパーセンタイル関数を使用して、VBA 内の配列 (arr1) 内の 100000 値のデータ セットの 99.5% パーセンタイルを計算しようとしています。

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

どちらも機能せず、型の不一致が発生し続けます (13)。

配列サイズを最大 65536 に制限すると、コードは正常に実行されます。Excel 2000 以降、利用可能なメモリによって制限されたマクロに渡すときに、Excel 2007 の配列サイズ以降、利用可能なメモリによって計算が制限されることを認識していました。

高性能サーバーで Excel 2010 を使用しています。誰でもこの問題が存在することを確認できますか? そう仮定すると、パーセンタイルを「手動で」計算する vba 関数を作成するか、ワークシートに出力し、そこで計算して読み返すという選択肢があると思います。代替手段はありますか?何が最も速いでしょうか?

4

2 に答える 2

1

これは、Excel のパーセンタイル関数を模倣した従来の VBA の例です。

パーセンタイルと信頼水準 (Excel-VBA)

ストレート挿入法が非効率的であるというジーンの暴露に照らして。この回答を次のように編集しました。

QuickSelect は大規模なレコードに優れているようで、非常に効率的であると読みました。

参考文献:

  1. Wikipedia.org: クイック セレクト
  2. AC# の実装は、パーセンタイルを計算して外れ値を削除するための Fast Algorithm で見つけることができます。これは、VB に簡単に変換できます。
于 2011-08-14T19:54:55.267 に答える
1

arr1 が 1 次元であり、要素が 65536 を超える場合、エラーが発生します ( VBA で配列引数を渡す配列サイズ制限の Charles の回答を参照してください)。arr1 を 1 列の 2 次元配列としてディメンション化します。

Dim arr1(1 to 100000, 1 to 1)

これは Excel 2013 で機能します。Charles の回答に基づくと、Excel 2010 で機能するようです。

于 2018-03-15T13:05:53.083 に答える