我目前有3张。表1包含12列。第一列是公司名称,我使用sheet2和公司名称列表来查找表1列A.
我是使用VLOOKUP
完成的 =IFERROR(VLOOKUP($A2,Sheet1!$A:$L,COLUMNS($B2:B2)+1,0),"")
这样可行,但公司名称在第1页中多次出现。
每次发生时我如何复制行?
我很高兴获得VBA解决方案。
答案 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语法。