从Sheet2查找名称和将行复制到Sheet3

时间:2014-04-11 11:01:29

标签: excel vba excel-vba excel-formula formulas

我目前有3张。表1包含12列。第一列是公司名称,我使用sheet2和公司名称列表来查找表1列A.

我是使用VLOOKUP

完成的
    =IFERROR(VLOOKUP($A2,Sheet1!$A:$L,COLUMNS($B2:B2)+1,0),"")

这样可行,但公司名称在第1页中多次出现。

每次发生时我如何复制行?

我很高兴获得VBA解决方案。

2 个答案:

答案 0 :(得分:2)

有效的方法应该有效。我不知道所有列是否与您的工作簿中的列相同,而且截至目前,如果表3中没有标题,则该表上的第一行将为空白。除此之外,这似乎有效。

Public Sub findMatch()
    Dim lastRowS1 As Long, lastRowS2 As Long, lastRowS3 As Long, i As Long, j As Long
    Dim tempS1 As String, temps2 As String
    lastRowS1 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    lastRowS2 = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row

    Application.ScreenUpdating = False

    For i = 1 To lastRowS1
        tempS1 = Sheet1.Cells(i, 1).Text
        For j = 1 To lastRowS2
            temps2 = Sheet2.Cells(j, 1).Text
            If tempS1 = temps2 Then
                lastRowS3 = Sheet3.Cells(Rows.Count, 1).End(xlUp).Row
                Sheet1.Rows(i).EntireRow.Copy Destination:=Sheet3.Rows(lastRowS3 + 1)
                j = lastRowS2
            End If
        Next j
    Next i

    Application.ScreenUpdating = True


End Sub

试试这个人:

Public Sub findMatch()
    Dim lastRowS1 As Long, lastRowS2 As Long, lastRowS3 As Long, i As Long, j As Long
    Dim tempS1 As String, tempS2 As String, tempRow As Long
    lastRowS1 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    lastRowS2 = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row

    Application.ScreenUpdating = False

    For i = 1 To lastRowS1
        tempS1 = Sheet1.Cells(i, 1).Text

        If Not IsError(Application.Match(tempS1, Sheet2.Range("A:A"), 0)) Then
            lastRowS3 = Sheet3.Cells(Rows.Count, 1).End(xlUp).Row
            Sheet1.Rows(i).EntireRow.Copy Destination:=Sheet3.Rows(lastRowS3 + 1)

        End If

    Next i

    Application.ScreenUpdating = True

End Sub

修改:忘记删除Debug.Print,这也可以加快速度。

答案 1 :(得分:0)

我建议您在this帖子中查看Siddharth Rout的答案。它与你想要的大致相似。简而言之,您将遍历工作表2上的公司名称,并使用Siddharth描述的查找功能在工作表1上找到匹配的行,然后将它们移动到工作表3上填充区域的底部。

您的需求略有不同,因为您希望实际移动内容,但只需使用宏记录器(在默认情况下隐藏的Developer选项卡上,您可能需要打开)将为您提供进行移动的VBA语法。