Excel VBA:使用2d阵列数据填充交错范围

时间:2011-07-18 20:02:28

标签: arrays excel vba range


我目前正在寻找一种更有效的方法,通过VBA,将从Sub中的二维数组传输的信息转换为excel工作簿中的交错范围集。我在下面的例子中提炼了我需要的东西,完成了代码;任何帮助将不胜感激。

我已经链接了描述我正在使用的示例(输入,数组和输出)的图像,并编写了我正在使用的代码示例。为简单起见,我们在工作簿中将“输入表”定义为Sheet1,将“输出表”定义为Sheet2:

Input Sheet

  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个链接,但我需要先获得更多代表)。

我想将数据传输到我的输出文件中,使其如下所示:

Output Sheet

以下是我目前处理这种情况的方法:

    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写入工作表的数量;他们真的付出了代价。

非常感谢任何帮助。

谢谢!

2 个答案:

答案 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. 

然后,您可以将“其他数据”放入您创建的所有新列中。