Как отфильтровать VBA с несколькими критериями

Моя проблема заключается в том, что я хочу отфильтровать определенное значение в разных столбцах листа, я попробовал записывать макрос, но функция записи, похоже, поддерживает только определенные значения, чтобы сохранить их вместо того, чтобы их вынимать.

Например, если столбец заполнен еженедельными данными, которые неизвестны заранее, я хочу убедиться, что в этой категории нет определенной категории. Если лист заполнялся еженедельными данными, с заголовками столбцов, такими как Company, Product, Id, Date of production, имя менеджера и все.

Из колонки для компании я хочу вывести «ABC company», «FAST ltd», «WIN Company», не зная названия других компаний в списке. Также я хочу взять некоторые продукты, такие как «компьютер», «телефон», «ноутбук», «сим». Функция записи в макросе только, кажется, говорит, что сохранить, а не то, что отнять. Мне нужно было бы выбрать каждую компанию, кроме трех компаний, которые я хочу отфильтровать.

Пожалуйста, помогите мне получить код для VBA для фильтрации с использованием нескольких критериев.

Я пробовал этот код

ActiveSheet.Range("$A$1:$G$24").AutoFilter Field:=2, Criteria1:="<>ABC ccompany", _ Operator:=xlAnd, Criteria2:="<>WIN company", Operator:=xlAnd, Criteria3:="<>FAST ltd" 

Но я получаю «ошибка времени выполнения 1004». Я думаю, что метод Criteria допускает только два критерия за раз.

Любая помощь будет большой.

В качестве альтернативы AutoFilter я нашел это у ученика @ Gary's, чтобы скрыть или показать целые строки на листе. Очень простая и легко изменяемая.

 Sub ThreeWay() Dim rng As Range, r As Range Set rng = Range("A2:A25") For Each r In rng v = Left(r.Value, 1) If v = "A" Or v = "D" Or v = "M" Then r.EntireRow.Hidden = False Else r.EntireRow.Hidden = True End If Next r End Sub 

Решение, скрывающее сами линии:

 Option Explicit Sub hide_values(Company As Variant, Product As Variant) On Error GoTo hell Dim myList As ListObject, myLine As Range, myValues As Variant Set myList = Me.ListObjects(1) ' assuming you have just one table on your page For Each myLine In myList.DataBodyRange.Rows myValues = myLine.Value myLine.EntireRow.Hidden = False If myValues(1, 1) = Company Then myLine.EntireRow.Hidden = True End If Else If myValues(1, 2) = Product Then myLine.EntireRow.Hidden = True End If Next myLine End hell: Debug.Assert False Resume End Sub Sub test_it() ActiveSheet.hide_values "FAST ltd", "computer" End Sub 

Это решение является неполным, поскольку оно исключает только одну компанию и один продукт, но ее можно расширить, передав набор строк для каждого и перейдя через эти множества.

Солить установку фильтров

 Sub hide_values(Company As Variant, Product As Variant) On Error GoTo hell Dim myList As ListObject, myLine As Range, myValues As Variant Set myList = Me.ListObjects(1) ' assuming you have just one table on your page myList.Range.AutoFilter Field:=1, Criteria1:="<>" & Company ' , Operator:=xlAnd, Criteria2:="<"&OtherCompany myList.Range.AutoFilter Field:=1, Criteria1:="<>" & Product hell: Debug.Assert False Resume End Sub Sub test_it() ActiveSheet.hide_values "FAST ltd", "computer" End Sub 

Это решение является неполным, поскольку оно исключает только одну компанию и один продукт. Расширение его до изъятия двух продуктов и компаний очевидно (см. Код с комментариями), но для его расширения требуется совершенно другой код для установки фильтров. (Дайте мне знать, если вам нужно, чтобы я это уточнил.)

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

Давайте будем гением компьютера.