我有三个工作簿。比较两个工作簿,删除匹配的行
一个工作簿是我每个月添加到我需要从第二个工作簿中删除的东西的列表。我每个月都会收到第二本工作簿。我收到的第二份工作簿总是包含多余的条目(数量每个月都在增长),并且不会很快修复。没有第二个工作簿无用的通用过滤器,所以我需要非常具体并且有一个愚蠢的清理清单。
我的第三个工作簿是我运行所有工作簿清理宏的地方。
目标是比较第一个工作簿A列或B列中的条目与我收到的第二个工作簿列A或B中的条目。如果任何条目匹配,请删除第二个工作簿上的整个行。
我将每月进行一次数百行的操作,它将从一个宏指定给第三个工作簿中的一个形状运行。
这里我发布了一些代码,可以让我打开我的两个文件并复制其中一个文件的内容,但我需要的是将比较和删除Workbook 2上与工作簿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
代码,评论和建议,非常感谢! 干杯, 克里斯托弗
代码更新8:30 AM:这是一种新的方式,我正在考虑使事情工作。我的代码行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
任何使用MS Access的经验?您可以创建一个指向这两个电子表格的链接,并将其作为表格拉入。然后,你需要的是一个SQL DELETE查询,它表示DELETE FROM TABLE 2 WHERE EXISTS IN TABLE 1)。这是简化的,不会运行,但是非常接近。然后你可以导出表格2.如果你打算做很多这类事情,我建议你查看一下。 – bushell
不幸的是,我的公司从来不会使用访问权限。效率太高。它会解决很多问题,但好主意! – chrisleepotter