我正在尝试使用百分位函数计算VBA中数组(arr1)中100000个值的99.5%百分位数,如下所示:
Pctile = Application.WorksheetFunction.Percentile(arr1, 0.995)
Pctile = Application.WorksheetFunction.Percentile_Inc(arr1, 0.995)
两者都不起作用,而且我不断出现类型不匹配(13)。
如果我将数组大小限制为最大值65536,则代码运行正常。据Excel Excel calculation limited by available memory自Excel 2000以来我知道array sizes when passing to macro limited by available memory。
我在高性能服务器上使用Excel 2010。谁能证实这个问题存在吗?假设如此,我认为我的选择是构建一个vba函数来“手动”计算百分位数或输出到工作表,在那里计算并读回来。有没有其他选择,什么是最快的?
答案 0 :(得分:1)
这是一个模仿Excel Percentile函数的Classic VBA示例。
Percentile and Confidence Level (Excel-VBA)
鉴于Jean对Straight Insertion方法的曝光效率低下。我用以下内容编辑了这个答案:
我读到QuickSelect似乎在大型记录方面表现优异,并且效率很高。
参考文献:
答案 1 :(得分:1)
如果arr1是1维且大于65536个元素,则会发生错误(请参阅Array size limits passing array arguments in VBA中的Charles'回答)。将arr1尺寸标注为具有单列的二维数组:
Dim arr1(1 to 100000, 1 to 1)
这适用于Excel 2013.基于Charles'回答,它似乎适用于Excel 2010。