【问题标题】:What is the fastest way to unload a 2 dimensional Array into an excel worksheet using VBA?使用 VBA 将二维数组卸载到 excel 工作表中的最快方法是什么?
【发布时间】:2016-06-02 22:29:53
【问题描述】:

由于在工作表中逐个单元格地写入值的大循环,我有一个运行时间很长的例程。我以为我会很聪明,首先将所有内容加载到二维数组中,然后快速将其转储到 Excel 工作表中。目标是加快速度。发现我不能只做我想做的事。

  xlsheet.Range("C2") = MASTER_OUT

发现上述方法不起作用。 MASTER_OUT 是一个具有 34 列和各种行的二维数组。我希望我不必遍历数组并在工作表中逐个单元格地放置数据,因为这根本不会节省任何时间。

【问题讨论】:

  • 使您的范围 C2 等于 MASTER_out 的 ubound 1 和 2。那就是让它 range(Cells (2,3),cells(ubound(master_out,1),ubound(maseter_out,2))=Master_out。现在我的 VBA 语法可能有点不合时宜,但是 ubound 1 和 2 MASTER_OUT 应该是 Master_out 中的行数和列数
  • 哎呀,我和杰森约翰逊一起上学!

标签: arrays excel vba performance


【解决方案1】:

.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(...?))


¹ 请参阅 Error13 in Excel VBA in data file 了解可靠的无限制的 2D 转置辅助函数。

【讨论】:

  • VBA 不是我的东西,但我在上面的 cmets 中所说的是否有效?我注意到你和 Tim Williams 都使用了 Resize。蒂姆最后也有一个 .value
  • Range object 的默认属性是Range.Value property,因此对于所有意图和目的来说,它从来没有必要。称它为编码风格或其他任何东西,但我倾向于总是在源上使用 .Value 并且(几乎)从不在目的地上使用。是的,你的评论非常有效,如果你作为答案发布的话,我会比我早半分钟。
  • 感谢吉普德。几乎完美地工作。所有数据似乎都在 col 3 中逐行发布,应该是 col by col。我尝试切换 ubound 号码,但没有奏效。有什么想法吗?
  • 参见上面关于转置(即翻转)数组值的附录。
  • 转置工作。这是否意味着当我加载数组时,我向后加载了它?
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 2020-08-11
  • 2017-01-26
  • 1970-01-01
相关资源
最近更新 更多