簡體   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