多维变体,用于在Excel工作表中进行高效写入

时间:2015-06-21 14:30:08

标签: arrays excel vba excel-vba

我有一个程序,我根据某些条件从工作表中收集一些行,然后将所选行粘贴到新工作表中。

我想知道是否可以减少在新工作表中编写所选行的次数。现在我正在逐行做。

为简单起见,我正在创建一个假设的例子。假设我有一个变量数组'table',如下所示:

Dim table(100) as Variant
For i = 0 To 100
  table(i)= Range(Range("A1").offset(i,0), Range("A1").Offset(i, 8)).Value
Next i

现在,如果我想将值粘贴到新工作表中,我正在做:

Worksheets(2).activate    
For i = 0 To 100
Range(Range("A1").offset(i,0), Range("A1").Offset(i, 8)).Value = table(i)
Next i

是否可以一步完成粘贴?我想知道因为,我观察到如果我创建一个多维变体,如

Dim data(100,8) as Variant
data = Range("A1:I100").Value

然后,我可以将其粘贴为新工作表中的一个步骤

Worksheets(2).activate   
Range("A1:I100").Value = data;

我的程序中的问题是,我根据某些条件逐个将一维水平范围插入到变量数组中。因此,如最初所示,我最终得到了像'table'这样的变体数组。是否有可能以某种方式将此表转换为标准的二维数组,如“数据”,如上所示,以便我可以在新工作表中使用一个步骤粘贴它?

我在VBA中相对较新,具有一定的C ++经验。任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

以下内容应该有效:

Range(Range("A1").Offset(0, 0), Range("A1").Offset(100, 8)).Copy
Worksheets(2).Activate
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues

即。选择要复制的所有内容,激活另一个工作表,然后将值粘贴到那里。

答案 1 :(得分:0)

你可能遇到了令人讨厌的事实,即使是一维范围也会复制到二维变体数组。以下函数采用一系列不必要的二维数组,并将其合并为一个可直接粘贴的二维数组(在您的情况下 - 您可以粘贴合并(表)):

Function consolidate(arrays As Variant) As Variant
'assumes that each entry of arrays is a 2-dimensional array of the form 1 to 1, 1 to n
'with the same n for each entry
    Dim block As Variant
    Dim i As Long, lb As Long, ub As Long, n As Long, j As Long
    lb = LBound(arrays)
    ub = UBound(arrays)
    n = UBound(arrays(lb), 2)
    ReDim block(lb To ub, 1 To n)
    For i = lb To ub
        For j = 1 To n
            block(i, j) = arrays(i)(1, j)
        Next j
    Next i
    consolidate = block
End Function