我有一个程序,我根据某些条件从工作表中收集一些行,然后将所选行粘贴到新工作表中。
我想知道是否可以减少在新工作表中编写所选行的次数。现在我正在逐行做。
为简单起见,我正在创建一个假设的例子。假设我有一个变量数组'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 ++经验。任何帮助将不胜感激。谢谢!
答案 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