我有一个例程由于运行了一个大循环而运行了很长时间,该循环会在工作表中逐个单元地写入值。我想我会很聪明,首先将所有内容加载到2D数组中,然后快速将其转储到excel工作表中。目标是加快速度。发现我不能随便做什么。

  xlsheet.Range("C2") = MASTER_OUT


发现上面不起作用。 MASTER_OUT是具有34个列和不同行的2D数组。我希望我不必遍历数组并将数据单元格逐个地放在工作表中,因为这样根本不会节省任何时间。

最佳答案

.Resize使用UBound function的目的地。

xlsheet.Range("C2").Resize(UBound(MASTER_OUT, 1), UBound(MASTER_OUT, 2)) = MASTER_OUT


Addendum:

翻转行和列很常见。如果是这种情况,请使用Excel Application objectTRANSPOSE function并翻转ubound排名。

xlsheet.Range("C2").Resize(UBound(MASTER_OUT, 2), UBound(MASTER_OUT, 1)) = _
   Application.Transpose(MASTER_OUT)


请注意,TRANSPOSE有局限性¹。我相信在无符号整数最大值附近的某个地方开始变得不可靠(例如65,536(...?))



¹有关不受限制的可靠2D转置辅助功能,请参见Error13 in Excel VBA in data file

10-08 09:00