繁体   English   中英

Excel VBA在循环中选择多个列

[英]excel vba select multiple columns in a loop

编辑 :我只有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

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

使用联合并为每个增量将For ... Next增加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相交以减少完整的列引用。 由于联合的范围,此“复制和粘贴”会重新生成“复制”,“选择性粘贴”,“值”和“格式”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM