arrays - 在大范围内解析为数组 VBA 的最有效方法

标签 arrays vba excel matrix

我在 excel 中有大量数据,我想将其解析为用户定义函数的数组。范围是 2250 x 2250。通过 for 循环解析每个单元格花费的时间太长,并且太大而无法通过此方法分配给数组:

dim myArr as Variant
myArr = range("myrange")

只是在这里集思广益,在每一列中解析并加入数组会更有效吗?有任何想法吗?

谢谢

最佳答案

你快到了。

您需要的代码是:

Dim myArr as Variant
myArr = range("myrange").Value2

请注意,我使用的是 .Value2范围的属性,而不仅仅是“值”,它读取格式和区域设置,并且可能会破坏任何日期

另请注意,我没有打扰 Redim并指定数组的维度:Value 和 Value2 属性是一个二维数组,(1 到 Rowcount,1 到 Col Count)...除非它是单个单元格,否则它将是一个标量变量,它会破坏任何下游代码那需要一个数组。但这不是已知 2250 x 2250 范围的问题。

如果您反转操作,并将数组写回范围,则需要将接收范围的大小精确设置为数组的尺寸。同样,您提出的问题不是您的问题:但是这两个操作通常是一起进行的。

一般原则是,对工作表的每次“命中”大约需要二十分之一秒——有些机器要快得多,但它们都有糟糕的日子——而“命中”或将单个单元格读取到变量几乎正是与将 700 万个单元格范围读取到变体数组中相同。都是几个万元比一次在一个单元格中读取该范围快几倍。

无论哪种方式,一旦您完成“读入”并停止与工作表交互,您也可以将 VBA 中的任何操作视为在零时间内发生。

这些数字都非常粗略和准备就绪,但一般原则将一直有效,直到您开始分配不适合工作内存的数组,而且,今天这不是您的问题。

记得到Erase完成后的数组变体,而不是依赖它超出范围:这会有所不同,范围是这个大小。

关于arrays - 在大范围内解析为数组 VBA 的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39897764/

相关文章:

regex - VBA正则表达式,替换组

vba - 使用 VBA 宏选择和复制 Outlook 电子邮件正文

python - 使用 excelwriter 写入 Excel 文件没有给出文件

PHP 比较两个日期数组并检查是否匹配

JavaScript 不区分大小写的数组通用排序

java - 唯一元素计数器 Java

excel - 如何修复错误 "Cannot update. Database or object is read-only."Excel Database Automation Anywhere

java - 用二维数组java写入txt文件

internet-explorer - 哪个 .dll 包含 HTMLElement 类?

excel - Excel/SharedStrings 的排序算法