根据另一个工作簿中的数据从一个工作簿中删除行

时间:2019-07-03 16:50:28

标签: excel vba

我提取了2个在Excel表中导出的数据库报告。我必须基于reportA中已经存在的数据从reportA中删除行。

(示例:如果第5列在该列的任何单元格中包含单词“ Pepsi ”,请删除reportA中的整行)

我还必须基于reportB中特定列中存在的数据从reportA中删除行。因此,如果reportA的特定列中的任何单元格都包含基于关键字的reportB的特定列中的确切单元格值,请删除reportA中的该行。

(示例:过滤reportB第4列中包含单词“ Coke ”或“ Sprite ”的任何单元格,reportB具有“ Coke Zero”和“ Sprite”的匹配项装运”在第4列的2个单元格中。从reportA的第5列中删除包含“可乐零”或“雪碧装运”的每行。

进行了一些研究,并提出了以下脚本,以便至少从reportA中删除行。

Sub Clean_Up_Food_Items()

  Application.Calculation = xlCalculationManual
  Application.ScreenUpdating = False

   Dim lo As ListObject

   Set lo = Sheet2.ListObjects(1)
   lo.Parent.Activate 'Activate sheet that table is on.

   lo.AutoFilter.ShowAllData

   lo.Range.AutoFilter Field:=5, Criteria1:="Coke*"

   Application.DisplayAlerts = False       
     lo.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
   Application.DisplayAlerts = True

   lo.AutoFilter.ShowAllData

   lo.Range.AutoFilter Field:=4, Criteria1:="Fanta*"

   Application.DisplayAlerts = False
     lo.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
   Application.DisplayAlerts = True

   lo.AutoFilter.ShowAllData

  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True

End Sub

以上方法至少可以根据reportA中存在的数据删除行,但我不知道如何根据reportB过滤数据以删除reportA中的行。

1 个答案:

答案 0 :(得分:0)

您可以在过滤器中一次使用多个值。要在过滤器中使用多个值,您需要使用1)一维数组作为条件,并使用2)xlFilterValues枚举值作为Operator参数。在下面的示例中,我用两个值过滤了范围A1的第一列。 IMG1

Sub Z()

    Dim rngA As Range
    Dim arrValuesToFilter As Variant

    arrValuesToFilter = [{"Fanta", "Pepsi"}]
    Set rngA = Range("A1").CurrentRegion
    rngA.AutoFilter Field:=1, Criteria1:=arrValuesToFilter, Operator:=xlFilterValues

End Sub