工作环境:Excel 2013
目标:复制C1:C9至B11:B19。 D1:D9至B21:B29。 E1:E9至B31:B39 .....
将所有范围复制到B列后,将A1:A9复制到A11:A19(A21:A29 ....)
我的想法是: 1.使用
之类的东西选择范围 range.end()
因为在我的一些工作表中,只有4个测试步骤。所以我需要一种语法,可以自我检查列中使用过的单元格。
答案 0 :(得分:0)
假设您要复制的列中没有更多数据,这应该可以正常工作
Sub copyToOneColumn()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Master")
Dim startCol As Integer
startCol = 3
Dim endCol As Integer
endCol = 10
Dim startRange As Range
Dim ra As Range
For i = startCol To endCol
Set startRange = ws.Range("A1").Offset(0, i - 1)
Set ra = ws.Range(startRange, ws.Cells(Rows.Count, startRange.Column).End(xlUp))
ra.Copy Destination:=ws.Range("B" & Rows.Count).End(xlUp).Offset(2, 0)
Next i
End Sub
答案 1 :(得分:0)
你可以像这样直接复制(技术上不是副本,因为它没有使用剪贴板):
Range("B1").Resize(Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Rows.Count,1) = Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Value
有效地,您正在查看B1,然后将其调整到一个范围,使其成为A列中使用的列数:Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Rows.Count
然后,您将在B列中将此新范围设为A列中相同范围的值。
请注意,如果您总是从第1行开始,这可以缩短,但如果您从另一行开始,我给您的代码就足够了。
答案 2 :(得分:0)
您可以尝试这样的事情......
Sub CopyData()
Dim wsMaster As Worksheet
Dim lr As Long, lc As Long, r As Long, c As Long
Application.ScreenUpdating = False
Set wsMaster = Sheets("Master")
lr = wsMaster.Cells(Rows.Count, 1).End(xlUp).Row
lc = wsMaster.Cells(1, Columns.Count).End(xlToLeft).Column
r = lr + 2
If lr <= 9 Then
For c = 3 To lc
wsMaster.Range(wsMaster.Cells(1, c), wsMaster.Cells(lr, c)).Copy wsMaster.Range("B" & r)
wsMaster.Range("A1:A" & lr).Copy wsMaster.Range("A" & r)
r = wsMaster.Cells(Rows.Count, 2).End(xlUp).Row + 2
Next c
End If
Application.ScreenUpdating = True
End Sub