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

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

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

Writing To A Range Using VBA

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

让我从一些基础开始:

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

至于你只写出已经改变的数据子集的问题,你需要一个快速的方法来确定哪些数据已经改变。 这可能是显而易见的,但需要考虑到,无论这种方法是什么也将需要一些时间。

要只写入已更改的数据,可以通过以下两种方法来完成:或者返回逐个写入单元或将数组分成更小的块。 要知道这两种方法之一是否比编写整个范围要快,唯一的办法就是尝试所有三种方法,并用数据来计时。 如果90%的数据发生改变,写入整个数据块肯定会比逐个写入数据块更快。 另一方面,如果改变的数据仅仅代表5%,则逐个单元可能会更好。 性能取决于太多的variables,以提供一个一个答案的解决scheme。