本聲明ws.Columns(1).Resize(, 2)
轉化爲
的解決方案「從第1列和2 200個多萬行」,你發現效果很好,但它不是動態的(硬編碼的最後一行)
這是怎麼了我會設置列的副本:
Option Explicit
Public Sub copyCols()
Dim ws1 As Worksheet, ws2 As Worksheet, rng1 As Range, rng2 As Range
Dim cols As Long, lr As Long
Dim col1 As Long 'renamed from "Start" (VBA keyword - property)
Dim lbl As Long 'renamed from "label" (VBA keyword - Control object)
Set ws1 = Sheet1 'ws
Set ws2 = Sheet2 'book.Worksheets(wsName & "-F")
col1 = 1
cols = 2
lbl = 1
lr = ws2.Cells(ws2.UsedRange.Row + ws2.UsedRange.Rows.Count, "A").End(xlUp).Row
Set rng1 = ws1.Range(ws1.Cells(1, col1), ws1.Cells(lr, col1 + 1))
Set rng2 = ws2.Range("A1:B" & lr)
rng1.Value2 = rng2.Value2
Set rng1 = ws1.Range(ws1.Cells(1, col1 + lbl), ws1.Cells(lr, col1 + lbl + cols))
Set rng2 = ws2.Range(ws2.Cells(1, col1 + lbl), ws2.Cells(lr, col1 + lbl + cols))
rng1.Value2 = rng2.Value2
End Sub
你可以連接範圍? 'set rng1 = Range(ws1.Cells(1,col1),ws1.Cells(lr,col1 + 1))&Range(ws1.Cells(1,x),ws1.Cells(lr,x + 1))'?也許前面有一個「聯盟」? – findwindow
當然,如果可能的話,儘量避免使用'Union',因爲它在幕後做了很多工作(檢查每個範圍中的每個單元格以組合起來看看是否有行或列重疊;與Intersect()相同) 。當範圍(列)不像列1,3,20,35時,「聯合」是最方便的。但是,如果它們在同一區域,請使用像A1:C200這樣的更快的標準符號。我會用'Union'來做這樣的事情'Set rng = Union(Range(「A1:C200」),Range(「E1:E200」),Range(「H1:I200」))' 200用一個變量保存UsedRange中的最後一行) –
廢棄工會的想法。它不工作:/只需設置兩個範圍,而不是XD – findwindow