vba - WorksheetFunction 数组大小限制

标签 vba excel excel-2010

我正在尝试使用百分位函数在 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/

相关文章:

string - 需要有关 Excel 和 VBA 字符串处理和存储限制的信息 - 以及建议的解决方法

vba - .Value = ""和 .ClearContents 之间有什么区别?

excel - 如何在 Excel 中将 hh :mm:ss. 000 转换为毫秒?

java.lang.OutOfMemoryError : Java heap space at org. apache.xmlbeans.impl.store.Saver$TextSaver.resize

vba - 使用嵌入变量引用范围

excel - 创建动态链接

vba - Worksheet_Activate 代码仅在 1 个工作表中无法运行

ms-access - 对 Access Web 数据库中的事件运行 VBA 代码

excel - 如何使用另一列中的类别将 Excel 中的列拆分为多列?

sql - 如何在 MS Access 查询中直接使用系统用户名?