[英]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.