我有一个例程由于运行了一个大循环而运行了很长时间,该循环会在工作表中逐个单元地写入值。我想我会很聪明,首先将所有内容加载到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 object的TRANSPOSE 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。