我在 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/