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

时间:2017-07-27 12:42:16

标签: excel vba excel-vba

我有三本工作簿。

一个工作簿是我每月添加的列表,我需要从第二个工作簿中删除的内容。我每个月都会收到第二本工作簿。我收到的第二本工作簿总是包含无关的条目(每月增长的数字),不会很快修复。如果不使第二个工作簿无用,我就无法制作通用的过滤器,所以我需要非常具体,并且有一个愚蠢的清洁列表。

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

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

我将每月执行一次,持续几百行,它将从分配给第三个工作簿上的形状的宏运行。

这里我发布一些代码,让我打开我的两个文件并复制其中一个的内容,但我需要的是比较和删除工作簿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

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

CODE UPDATE 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

2 个答案:

答案 0 :(得分:0)

回答您的具体问题。

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

应该是

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

我想帮助解决您的其他问题,但您的描述令人困惑,这是我理解的;您在第二个工作簿中识别错误信息并将该信息从第二个工作簿复制到第一个工作簿,然后您希望宏匹配第一个工作簿中的内容与第二个工作簿,并删除第二个工作簿中匹配的行。问题,为什么不删除第二个工作簿中的行而不是将它们复制到第一个工作簿?

答案 1 :(得分:-1)

你可以使用find方法;打开工作簿后你可以使用这个代码,找到单元格地址你可以轻松删除它清除命令

Dim GCell As Range

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