我目前正在寻找一种更有效的方法,通过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现在看起来与范围完全一样。 (我发布第3个链接,但我需要先获得更多代表)。
我想将数据传输到我的输出文件中,使其如下所示:
以下是我目前处理这种情况的方法:
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写入工作表的数量;他们真的付出了代价。
非常感谢任何帮助。
谢谢!
答案 0 :(得分:2)
“复制和粘贴”这些值可能会快得多。您显然需要对此进行概括以适合您的目的,但此代码适用于您提供的示例:
Sub TransferData()
Sheet3.Range("A1:A7") = Sheet1.Range("A1:A7").Value
Sheet3.Range("C1:C7") = Sheet1.Range("B1:B7").Value
Sheet3.Range("F1:I7") = Sheet1.Range("C1:F7").Value
End Sub
答案 1 :(得分:1)
根据要插入的“其他数据”的大小,一种非常简单的方法是将所有数据传输到输出范围,然后插入新列并根据需要放置其他数据。
例如:
data = Worksheets("InputSheet").Range("A1:F7").Value
Worksheets("OutputSheet").Range("A1:F7").Value = data
Worksheets("OutputSheet").Columns("B").EntireColumn.Insert ' do this for every column you need, within reason.
然后,您可以将“其他数据”放入您创建的所有新列中。