excel vba在一个循环中select多个列

编辑 :我只有28000列,你们都是正确的,他们不能都在一张工作表。 我只用一部分数据testing了我的代码,但还没有意识到它并不适合

我有28000列的数据。 我试图复制特定列5,12,19,26 …(即对于i = 1:4000,列号= 7 *(i-1)+ 5)。 我原来的想法是在下面,但问题是,在循环的每次迭代后,前一列被取消select。 所以下面的代码不会复制预期的数据。

For i = 1 To 4000 DataSheet.Columns(7 * (i - 1) + 5).Select Next i Selection.Copy ResultsSheet.Paste 

我想到了下面的替代方法(哪个工作,但是非常慢),但是我希望能够写一些更快的执行(部分问题是代码select目标工作表并单独粘贴每个列,基本上四倍于步骤与第一个解决scheme类似)。

 For i = 1 To nSymbols DataSheet.Columns(7 * (i - 1) + 5).Copy ResultsSheet.Select Columns(i+1).Select ActiveSheet.Paste Next i 

任何想法如何使这个代码运行(更快)?

使用联合和增加你的For …下一个由7增量。

 dim c as long, rng as range with worksheets("sheet1") set rng = intersect(.columns(5), .usedrange) for c = 12 to 4000 step 7 set rng = UNION(rng, intersect(.columns(c), .usedrange)) next c end with debug.print rng.address(0, 0) rng.copy destination:=ResultsSheet.cells(2, 1) 

我已经添加了与UsedRange相交,以减less完整的列引用。 由于联盟的范围,这个复制和粘贴resjults复制,粘贴特殊值,fORMATS。