excel vba在循环中选择多个列

时间:2017-03-21 00:22:39

标签: excel vba for-loop multiple-columns execution-time

修改:我只有28,000个专栏,而且你们都认为它们都不适合一个工作表。我只用一部分数据测试我的代码,但还没有意识到它不适合

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

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

Selection.Copy
ResultsSheet.Paste

我想到了下面的替代方案(可行,但速度非常慢),但我希望能写出更快速执行的东西(问题的一部分是代码选择目标工作表并分别粘贴每一列,基本上是四倍与第一个解决方案类似的步骤数。)

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

有关如何运行此代码的任何想法(更快)?

1 个答案:

答案 0 :(得分:1)

使用Union并为每个增量增加For ... Next by 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)

我添加了Intersect和UsedRange以减少完整的列引用。由于Union'ed系列,这个副本&将复制粘贴到“复制”,“粘贴特殊”,“值”和“fORMATS”中。

相关问题