Excel 如何删除sheet1中不在sheet2中的所有行

Excel 如何删除sheet1中不在sheet2中的所有行,excel,ms-office,vlookup,Excel,Ms Office,Vlookup,朋友们,我有两张Excel表格,如下所示 **Sheet_1** **Sheet_2** ID Name Address ID Name Address 1 A Any 2 B Any 2 B Any 4 D Any 3 C Any 5 E Any 4 D Any 5 E Any 我想删除工作表_1中不在工作

朋友们,我有两张Excel表格,如下所示

**Sheet_1**           **Sheet_2**
ID  Name  Address      ID Name Address
1    A     Any         2   B     Any
2    B     Any         4   D     Any
3    C     Any         5   E     Any
4    D     Any
5    E     Any
我想删除工作表_1中不在工作表_2中的所有行


注意:工作表的ID是唯一的

我不确定是否正确,但您想删除不在
工作表2中的行吗

这样一来,你的
Sheet1
就成了
Sheet2
的副本,不是吗

好吧,不管怎样,这是主
的代码:

Sub Main()
Set idsToExclude = CreateObject("Scripting.Dictionary"): idsToExclude.CompareMode = TextCompare
'fill dictionary with IDs from sheet 2
Set idsToExclude = CreateDictFromColumns("Sheet2", "A", "B")
'find last populated row
xEndRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

'iterate all rows from bottom to top
For i = xEndRow To 2 Step -1
    'get value of cell at current row and 1st column
    currentCellValue = ActiveSheet.Cells(i, 1).Value
    'if row doesnt met criteria, delete it
    If Not idsToExclude.Exists(currentCellValue) Then
        Rows(i).Delete
    End If

Next
End Sub
使用
函数
从特定的
工作表
中获取ID和名称:

Function CreateDictFromColumns(sheet As String, keyCol As String, valCol As String) As Object
    Set dict = CreateObject("Scripting.Dictionary"): dict.CompareMode = TextCompare
    Dim rng As Range
    Dim i As Long
    Dim lastCol As Long '// for non-adjacent ("A:ZZ")
    Dim lastRow As Long
    lastRow = Sheets(sheet).Range(keyCol & Sheets(sheet).Rows.Count).End(xlUp).Row
    Set rng = Sheets(sheet).Range(keyCol & "1:" & valCol & lastRow)
    lastCol = rng.Columns.Count
    For i = 2 To lastRow
        If (rng(i, 1).Value = "") Then Exit Function
        dict.Add rng(i, 1).Value, rng(i, lastCol).Value
    Next
    Set CreateDictFromColumns = dict
End Function
注意:如果您想做相反的操作(删除
工作表1
工作表2
中的ID),只需从以下行中删除
Not
操作符:

If Not idsToExclude.Exists(currentCellValue) Then

如您所见,某些部分是硬编码的。我的建议是对这些部分进行调整,使其更具活力,由于缺乏相关细节,我不得不这样写。

您能告诉我们您迄今为止尝试了什么吗?我有一张有27000条记录的工作表1和只有600条记录的工作表2,工作表1中不存在一些工作表2记录,因此我想从工作表2中删除这些记录。请使用工作表1上的
MATCH()
,检查工作表2上是否存在ID-排序并删除错误结果。。。。或者使用Power Query并将两个表合并到所需的联接类型中……记住,如果解决了巡更问题,请标记为答案。我从中获得了
函数,并对其进行了一些修改。