我正在尝试使用百分位函数在 VBA 中计算数组 (arr1) 中包含 100000 个值的数据集的 99.5% 百分位数,如下所示:
Pctile = Application.WorksheetFunction.Percentile(arr1, 0.995)
Pctile = Application.WorksheetFunction.Percentile_Inc(arr1, 0.995)
两者都不起作用,而且我一直遇到类型不匹配 (13)。
如果我将数组大小限制为最大 65536,代码运行良好。据我所知 calculation limited by available memory自 Excel 2007 array sizes when passing to macro limited by available memory自 Excel 2000 以来。
我在高性能服务器上使用 Excel 2010。任何人都可以确认这个问题存在吗?假设是这样,我认为我的选择是构建一个 vba 函数来“手动”计算百分位数或输出到工作表,在那里计算并读回。有没有其他选择,什么是最快的?
最佳答案
如果 arr1 是一维的并且有超过 65536 个元素,就会发生错误(参见 Charles 在 Array size limits passing array arguments in VBA 中的回答)。将 arr1 维度作为具有单列的二维数组:
Dim arr1(1 to 100000, 1 to 1)
这适用于 Excel 2013。根据 Charles 的回答,它似乎适用于 Excel 2010。
关于vba - WorksheetFunction 数组大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7024826/