Удалить строки из одной рабочей книги на основе данных в другой рабочей книге - PullRequest
0 голосов
/ 03 июля 2019

Я извлекаю 2 отчета базы данных, которые экспортируются в таблицы Excel. Я должен удалить строки из отчета A на основе данных, которые уже существуют в reportA.

(Пример: если в столбце 5 содержится слово " Pepsi " в любой ячейке этого столбца, удалите всю строку в отчете A)

Я также должен удалить строки из отчета A на основе данных, которые существуют в определенном столбце в reportB. Поэтому, если любая ячейка в определенном столбце reportA содержит точное значение ячейки из определенного столбца в reportB на основе ключевых слов, удалите эту строку в reportA.

(Пример: отфильтруйте любую ячейку в столбце 4 отчетаB, содержащую слово " Coke " или " Sprite ", в reportB есть совпадения "Coke Zero" и "Sprite Shipment" в 2 ячейках в столбце 4. Удалите КАЖДУЮ строку из отчетаA, которая содержит «Ноль кокса» или «Отгрузка спрайта» в столбце 5 отчетаA)

Провел небольшое исследование и придумал скрипт ниже, чтобы хотя бы удалить строки из отчета A.

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 голосов
/ 03 июля 2019

Вы можете использовать несколько значений одновременно в фильтре.Чтобы использовать несколько значений в фильтре, необходимо использовать 1) 1-D массив для критериев и 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...