Excel 如何删除sheet1中不在sheet2中的所有行
朋友们,我有两张Excel表格,如下所示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中不在工作
**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并将两个表合并到所需的联接类型中……记住,如果解决了巡更问题,请标记为答案。我从中获得了函数,并对其进行了一些修改。