如何在VBA中将一系列单元格复制到另一列?
工作环境:Excel 2013 目标:将C1:C9复制到B11:B19。D1:D9至B21:B29。E1:E9至B31:B39 将所有范围复制到B列后,将A1:A9复制到A11:A19(A21:A29….) 我的想法是: 1.使用以下命令选择一个范围:如何在VBA中将一系列单元格复制到另一列?,vba,excel,Vba,Excel,工作环境: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个测试步骤。因此,我需要一种语法,可以自我检查列中使用的单元格 将范围复制到B列 考虑页面布局,在两行之间留出1行 我的代码是: Worksheets("Master").Colum
range.end()
因为在我的一些表格中,只有4个测试步骤。因此,我需要一种语法,可以自我检查列中使用的单元格
Worksheets("Master").Columns(3).UsedRange.Copy
Worksheets("Master").Range("B11").PasteSpecial
但看起来(i).UsedRange.Copy列不起作用。这是一部特别的作品
我的问题是:
如何在列中选择使用的范围?列的数量不是固定的,这意味着一些图纸有40列,但其他一些可能有30列
谢谢
我附上了一张表格的截图供您参考 假设要复制的列中没有更多数据,这应该可以工作
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
您可以直接复制(技术上不是复制,因为它不使用剪贴板),如下所示:
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行开始,这可以缩短,但是如果您从另一行开始,我给您的代码就足够了。您可以尝试这样的方法
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
Sub-CopyData()
将wsMaster设置为工作表
变暗lr为长,lc为长,r为长,c为长
Application.ScreenUpdating=False
设置wsMaster=图纸(“主图纸”)
lr=wsMaster.Cells(Rows.Count,1).End(xlUp).Row
lc=wsMaster.Cells(1,Columns.Count).End(xlToLeft).Column
r=lr+2
如果为lr,则使用范围始终包括从左上到右下的区域。顶部和底部可能有空白单元格,UsedRange.Columns(1)
不是A列。处理可能存在空白单元格的最简单方法是将它们包括在粘贴范围内。因此,您希望将C列复制到B列。如果要复制的列没有任何其他数据,则可以使用Range(“C1:C”)和Range(“C”和Rows.Count).End(xlUp.Row)
获取列C中的所有数据