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

时间:2017-05-15 01:03:56

标签: excel vba excel-vba

工作环境: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个测试步骤。所以我需要一种语法,可以自我检查列中使用过的单元格。

  1. 将范围副本复制到B列。
  2. 在考虑页面布局之间留一行。
  3. 我的代码是:

    Worksheets("Master").Columns(3).UsedRange.Copy
    Worksheets("Master").Range("B11").PasteSpecial
    

    但似乎是列(i).UsedRange.Copy不起作用。特殊作品。

    我的问题是:

    如何在列中选择使用的范围?列数不固定,这意味着一些工作表有40列,但其他一些可能有30列。

    谢谢!

    我附上了工作表的一个屏幕截图供您参考。Screenshot of the sheet

3 个答案:

答案 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