将行从一个工作表复制到另一个工作表

时间:2015-09-12 20:24:50

标签: excel vba excel-vba

我想在几个条件下将数据从一张表复制到另一张表: 1.从第1行和第1列开始,如果R1 C2不为空则匹配,然后复制R1 C1和R1 C2对并粘贴到另一个工作表中作为新行。 增加列的计数器并将R1 C1与R1 C3匹配,依此类推。 当列计数器达到10时递增Row。

我尝试了以下代码,但是编译错误为Sub或函数未定义。

请帮忙。

Private Sub CommandButton1_Click()
    Dim x As Integer
    Dim y As Integer
    x = 2
    y = 2
    Do While Cells(x, 1) <> ""
        If Cells(x, y) <> "" Then
            Worksheets("Sheet1").Cells(x, 2).Copy
            Worksheets("Sheet2").Activate
            erow = Sheet2.Cells(Rows.Count, 1).End(xlUp) > Offset(1, 0).Row
            ActiveSheet.Paste Destination:=Worksheets("Sheet2").Rows(erow)
        End If
        Worksheets("Sheet1").Activate
        y = y + 1
        If y = 10 Then x = x + 1
        End If
    Loop
End Sub

1 个答案:

答案 0 :(得分:1)

由于>

中的Sheet2.Cells(Rows.Count, 1).End(xlUp) > Offset(1, 0).Row,您提出错误
  1. 在处理行时,请避免使用Integer。发布excel2007后,行数增加,Integer可能无法处理行号。

  2. 避免使用.Activate

  3. 这是你在尝试什么? (的未测试

    注意:我正在演示,因此我正在直接使用excel单元格。但实际上,我会使用autofilter&amp;数组来执行此操作。

    Private Sub CommandButton1_Click()
        Dim wsInput As Worksheet, wsOutput As Worksheet
        Dim lRowInput As Long, lRowOutput As Long
        Dim i As Long, j As Long
    
        Set wsInput = ThisWorkbook.Worksheets("Sheet1")
        Set wsOutput = ThisWorkbook.Worksheets("Sheet2")
    
        With wsInput
            lRowInput = .Range("A" & .Rows.Count).End(xlUp).Row
    
            For i = 2 To lRowInput
                If .Cells(i, 2).Value <> "" Then
                    For j = 3 To 10
                        lRowOutput = wsOutput.Range("A" & wsOutput.Rows.Count).End(xlUp).Row + 1
    
                        .Range(.Range(.Cells(i, 1), .Cells(i, 1)).Address & _
                        "," & _
                        .Range(.Cells(i, j), .Cells(i, j)).Address).Copy _
                        wsOutput.Range("A" & lRowOutput)
                    Next j
                End If
            Next i
        End With
    End Sub