2017-07-27 81 views
1

我有三个工作簿。比较两个工作簿,删除匹配的行

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

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

目标是比较第一个工作簿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 
+0

任何使用MS Access的经验?您可以创建一个指向这两个电子表格的链接,并将其作为表格拉入。然后,你需要的是一个SQL DELETE查询,它表示DELETE FROM TABLE 2 WHERE EXISTS IN TABLE 1)。这是简化的,不会运行,但是非常接近。然后你可以导出表格2.如果你打算做很多这类事情,我建议你查看一下。 – bushell

+0

不幸的是,我的公司从来不会使用访问权限。效率太高。它会解决很多问题,但好主意! – chrisleepotter

回答

-1

您可以使用find方法得到一个类型不匹配错误;打开工作簿后你可以使用此代码,findind单元格地址你可以很容易地删除它清除命令

Dim GCell As Range 

Set GCell = ActiveSheet.Cells.Find("yourvariable") 
+0

这也可以,但是避免使用ActiveSheet是我遵循的一个很好的规则。如果某些代码出错或选择了其他工作表,它可避免工作表之间的混淆。我正在尝试创建一个很难解决的工作簿。此外,在这种情况下,我认为我超出了我的知识范围。我知道我可以用这种方法找到一个特定的单词,但我不知道我的Workbook1上的所有零件编号条目。 – chrisleepotter

0

要回答你的具体问题。

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

应该

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

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

+0

嘿,谢谢一堆,我打算将这个应用到我的代码! 对不起,我想澄清一下。仅仅提供信息很难,尤其是在没有上下文的情况下。所以,我只有一个宏的Excel表格。我有一张Excel表格,其中包含我过去几个月收集的所有“不良数据”零件编号。我还有另外一张单独的表格,每个月我都会收到这些表格,可能会或可能不会收集我收集的一些“不良数据”。我只是想确保每当我收到这个新的工作簿时,只需按下一个按钮就可以消除我不想要的所有数据。泰! – chrisleepotter

相关问题