我可以写一个数组到一个范围,只重新计算改变的单元格



我有一个非常大的数据数组,我正在写入一个范围。然而,有时数组中只有少数元素会发生变化。我相信,因为我写了整个数组的范围,所有的单元格都被重新计算。有没有一种方法可以有效地编写元素的子集——特别是那些已经改变的元素?

更新:我基本上遵循这个方法来节省写时间:

http://www.dailydoseofexcel.com/archives/2006/12/04/writing-to-a-range-using-vba/

特别地,我有一个属性集合,我用我需要的数据填充所有对象(它们是单元格)。然后,循环遍历所有属性并将值写入数组,对数组进行索引,使其与我想要写入的范围的维度相匹配。最后,是TheRange。我将数组中的数据写入到表单中。最后一步覆盖整个范围,我相信即使在实际值没有改变的单元格中也会导致重新计算。

让我从一些基本的开始:

  • 当您写入单元格范围时,即使值相同,Excel仍然将其视为更改并将相应地重新计算。如果您关闭了计算,那么下次计算范围/工作表/工作簿时,它将重新计算依赖于该范围的所有内容。
  • 正如您所发现的,将数组写入范围比逐个单元写入要快得多。同样,将一个范围读入数组要比逐个单元读取快得多。

对于只写入已更改的数据子集的问题,您需要一种快速的方法来识别哪些数据已更改。这可能是显而易见的,但需要考虑到,无论这种方法是什么,也需要一些时间。

要只写入已更改的数据,有两种方法:一种是逐个写单元格,另一种是将数组分成更小的块。要知道这两种方法中的任何一种是否比写入整个范围更快,唯一的方法是尝试这三种方法,并用数据对它们进行计时。如果90%的数据被修改了,那么写整个块肯定比一个单元一个单元地写要快。另一方面,如果更改的数据只占5%,逐单元可能更好。性能依赖于太多的变量,无法给出一个通用的解决方案。

相关内容

最新更新