使用VBA将二维数组卸载到Excel工作表中的最快方法是什么?

Joh*_*son 2 arrays excel performance vba

由于在工作表中逐个单元地写入值的大循环,我有一个运行时间很长的例程.我以为我会聪明并将所有内容加载到2D阵列中然后快速将其转储到Excel工作表中.目标是加快速度.发现我不能只做我想要的.

  xlsheet.Range("C2") = MASTER_OUT
Run Code Online (Sandbox Code Playgroud)

发现以上不起作用.MASTER_OUT是一个包含34列和各行的2D数组.我希望我不必遍历数组并在工作表中逐个单元格放置数据,因为这根本不会节省任何时间.

小智 6

.使用UBound函数重新调整目标.

xlsheet.Range("C2").Resize(UBound(MASTER_OUT, 1), UBound(MASTER_OUT, 2)) = MASTER_OUT
Run Code Online (Sandbox Code Playgroud)

附录:

翻转行和列是很常见的.如果是这种情况,则使用Excel Application对象TRANSPOSE函数并翻转未结束的排名.

xlsheet.Range("C2").Resize(UBound(MASTER_OUT, 2), UBound(MASTER_OUT, 1)) = _
   Application.Transpose(MASTER_OUT)
Run Code Online (Sandbox Code Playgroud)

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


¹请参阅数据文件中的Excel VBA中的Error13,以获得可靠的2D转置辅助函数,没有任何限制.