比较两个工作簿,删除匹配的行

我有三个工作簿。

一个工作簿是我每个月添加的列表,我需要从第二个工作簿中删除的东西。 我每个月都会收到第二本工作簿。 我收到的第二份工作簿总是包含多余的条目(数量每个月都在增长),并且不会很快被修复。 没有通用的filter,我没有使第二个工作簿无用,所以我需要非常具体,有一个愚蠢的清洁清单。

我的第三个工作簿是我运行所有工作簿清理macros的地方。

目标是比较第一个工作簿A或B列中的条目与我收到的第二个工作簿A或B列中的条目。 如果任何条目匹配,删除第二个工作簿上的整个行。

我将这样做一个月一次,几百行,它将从一个macros被分配到第三个工作簿上的形状运行。

在这里,我发布了一些代码,可以让我打开我的两个文件并复制其中一个文件的内容,但是我需要的是可以比较和删除Workbook 2上与Workbook 1相匹配的代码的代码。是可怕的,不值得发布。

码:

Sub test() Dim strFileName As String Dim wbTarget As Workbook Dim wbSource As Workbook Dim wsTarget As Worksheet Dim wsSource As Worksheet strFileName = Application.GetOpenFilename("Excel files (*.xls*),*.xl*", Title:="Open data") Set wbSource = ThisWorkbook Set wbTarget = Workbooks.Open(strFileName) Set wsSource = wbSource.Worksheets("Sheet1") Set wsTarget = wbTarget.Worksheets("Sheet1") 'to copy from Target - > Source wsTarget.Range("B2").Resize(5, 5).Copy wsSource.Range("B2") 'etc. End Sub 

代码,评论和build议非常感谢! 干杯,克里斯托弗

代码更新8:30 AM:这是我正在考虑使事情发生的新方法。 我得到一个types不匹配错误的代码行Set Rng = Range("A1:B10000" & LR)

  Sub test() Dim strFileName As String Dim strFileName2 As String Dim wbTarget As Workbook Dim wbSource As Workbook Dim wsTarget As Worksheet Dim wsSource As Worksheet Dim LR Dim Rng As Range strFileName = Application.GetOpenFilename("Excel files (*.xls*),*.xl*", Title:="Open 'Things Which Have Been Removed'") strFileName2 = Application.GetOpenFilename("Excel files (*.xls*),*.xl*", Title:="Open This Month's Purge List") Set wbSource = ThisWorkbook Set wbTarget = Workbooks.Open(strFileName) Set wsSource = wbSource.Worksheets("Sheet1") Set wsTarget = wbTarget.Worksheets("Sheet1") Set LR = wsSource.UsedRange.Rows With wbTarget.Sheets(1) Set Rng = Range("A1:B10000" & LR) Rng.RemoveDuplicates Columns:=Array(4), Header:=xlNo End With End Sub 

回答你的具体问题。

 Set Rng = Range("A1:B10000" & LR) 

应该

 Set Rng = Range("A1:B" & LR) 

我想帮助你的其他问题,但你的描述是混乱的,这是我的理解; 您在第二个工作簿中标识错误的信息并将该信息从第二个工作簿复制到第一个工作簿,然后您需要一个macros将第一个工作簿中的内容与第二个工作簿相匹配,并删除第二个工作簿中匹配的行。 问题,为什么不删除第二个工作簿中的行而不是将它们复制到第一个工作簿?

你可以使用find方法; 打开工作簿后,你可以使用这个代码,findind的单元格地址你可以很容易地删除它清除命令

 Dim GCell As Range Set GCell = ActiveSheet.Cells.Find("yourvariable")