gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:15:50 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com