如何在VBA中将一系列单元格复制到另一列?

如何在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

工作环境: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").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中的所有数据