【发布时间】:2011-07-19 04:39:22
【问题描述】:
我目前正在寻找一种更有效的方法,通过 VBA,将信息从 Sub 中的二维数组传输到 Excel 工作簿中的一组交错范围内。我将我需要的内容提炼成下面的示例,并附有代码;任何帮助将不胜感激。
我已经链接了描述我正在使用的示例(输入、数组和输出)的图像,并在下面编写了我正在使用的代码示例。为简单起见,让我们在工作簿中将“输入工作表”定义为 Sheet1,将“输出工作表”定义为 Sheet2:
Option Explicit
Sub TransferData()
Dim myArray as Variant 'Define the array to hold the data.
Dim i as integer 'Define a generic loop counter variable.
myArray = Sheet1.Range("A1:F7") 'Pulls all the relevant data into the array.
myArray 现在看起来与范围完全一样。 (我会发布第三个链接,但我需要先获得更多代表)。
我想将数据传输到我的输出文件中,使其如下所示:
这是我目前处理这种情况的方式:
For i = 1 to ubound(myArray)
Sheet2.Cells(i,1) = myArray(i,1)
Sheet2.Cells(i,3) = myArray(i,2)
Sheet2.Cells(i,6) = myArray(i,3)
Sheet2.Cells(i,7) = myArray(i,4)
Sheet2.Cells(i,8) = myArray(i,5)
Sheet2.Cells(i,9) = myArray(i,6)
Next i
End Sub
我的问题是这样的;有没有办法以类似于我抓取数组的方式将数据从数组传输到交错范围?一次一个范围?例如,类似于以下内容的内容:
Sheet2.Range("A1:A8") = myArray(1 to 7, 1) 'Note: this is total pseudocode
Sheet2.Range("C1:C8") = myArray(1 to 7, 2) 'Note: this is total pseudocode
等等……等等……
我相信到目前为止我已经成功地自学了相当多的 VBA,但我绝对不是什么都知道,这是我需要帮助的东西。我正在尝试尽量减少从 VBA 对工作表的写入量;他们真的付出了代价。
非常感谢任何帮助。
谢谢!
【问题讨论】:
-
我认为您不只是使用
=Sheet1!B1作为 Sheet2 的单元格 C2 的公式等是有原因的。 -
另外,这本身并不是一个答案,但关闭屏幕绘画可能会极大地加速您现有的算法 (
Application.ScreenUpdating = False)。只是不要忘记在错误处理程序中和退出例程之前重新打开它。 -
当然。首先,感谢您添加图片!将要编辑 sheet1 的用户有删除行的习惯,我试图避免在删除引用的单元格时可能弹出的任何 #REF 错误。我的解决方法是简单地将整个范围闪存到一个数组中,并通过快速读/写来处理事情。这有意义吗?
-
再次感谢;我肯定会关闭屏幕更新,但在实际应用程序中真正让我受益的是,我正在处理一个最大为 500 行 x 96 列的二维数组,这使得逐个单元格写入循环真的很乏味。