Ошибка массива автофильтра Excel VBA

Мои данные выглядят следующим образом:

Имя Значение Флаг

Алиса 5 ВЫКУП

Боб 8 Прыжок

Дан 9

Алиса 1

Алиса 6 прыжок

Дан 0 ВЫКУП

Боб 8 Прыжок

Если для любого имени в любой записи в поле «Флаг» есть «ВЫКУП», то я хочу сохранить все записи, связанные с этим именем. У Алисы есть 3 записи, и одна из них BUYBACK, поэтому я хочу сохранить все записи ALice. У Дэна есть выкуп в одном из двух, поэтому я хочу сохранить обе записи Дэна, пока обе записи Боба будут удалены.

Когда я пытаюсь сделать это ниже, я получаю сообщение об ошибке в своем автофильтре. Ошибка говорит: «Требуется объект». Я не могу понять, что не так.

 n = 1

     Dim BBK_Array() As Variant

     For j = 1 To FinalRow

        If Cells(j, 3).Value = "BUYBACK" Then
            If n = 1 Then
                 ReDim Preserve BBK_Array(1 To n)
                 BBK_Array(n) = Cells(j, 1).Value
                 n = n + 1

            ElseIf BBK_Array(n - 1) <> Cells(j, 1).Value Then
                    ReDim Preserve BBK_Array(1 To n)
                    BBK_Array(n) = Cells(j, 1).Value
                    n = n + 1

            End If


        End If
     Next j




     ActiveWorksheet.UsedRange.AutoFilter Field:=1, Criteria1:=BBK_Array(), Operator:=xlFilterValues

РЕДАКТИРОВАТЬ:

Когда я это сделал, это сработало. Я не знаю почему:

     ActiveWorkbook.Activesheet.UsedRange.AutoFilter Field:=1, Criteria1:=BBK_Array(), Operator:=xlFilterValues

person Amatya    schedule 20.11.2013    source источник
comment
Где находится FinalRow??   -  person Gary's Student    schedule 21.11.2013
comment
@Студент Гэри .. ранее в коде. Когда я сделал Activeworkbook.activesheet, это сработало.   -  person Amatya    schedule 21.11.2013
comment
Хорошо, я думаю, мой лист не был активен или что-то в этом роде. Мне удалить вопрос? Можете ли вы сказать мне, почему activeworkbook.activesheet работал, а activesheek — нет? Я написал макрос в том же файле, в котором хранятся данные. спасибо   -  person Amatya    schedule 21.11.2013
comment
Не удаляйте вопрос......исправляйте проблемы по мере их обнаружения.......также исправьте написание BuyBack по сравнению с BuyBack. ВЫКУП   -  person Gary's Student    schedule 21.11.2013


Ответы (1)


Вам нужен VBA для этого? Простая формула Excel может решить вашу проблему.

Допустим, ваши данные выглядят так

введите здесь описание изображения

Все, что вам нужно сделать, это создать 4-й столбец и ввести формулу в ячейку D2.

=SUMPRODUCT((A:A=A2)*(C:C="BuyBack"))

Просто автоматически заполните формулу до последней строки. Теперь отфильтруйте столбец D по 0 и удалите его.

введите здесь описание изображения

Видеть это.

введите здесь описание изображения

После этого удалите столбец D.

Если вам все еще нужно решение VBA, запишите макрос, выполните описанные выше шаги и просто измените его в соответствии со своими потребностями. Это будет 9 строк кода (включая объявления)

Вот пример

Sub Sample()
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim lRow As Long: lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

    ws.Range("D2:D" & lRow).Formula = "=SUMPRODUCT((A:A=A2)*(C:C=""BuyBack""))"
    ws.Range("D2:D" & lRow).Value = ws.Range("D2:D" & lRow).Value

    ws.AutoFilterMode = False
    ws.Range("D2:D" & lRow).AutoFilter Field:=1, Criteria1:="=0"
    ws.Range("D2:D" & lRow).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    ws.AutoFilterMode = False

    ws.Columns(4).Delete
End Sub

И это вывод, который мы получаем после запуска макроса.

введите здесь описание изображения

person Siddharth Rout    schedule 20.11.2013
comment
Это небольшая часть очень длинной серии обработки данных, которую я делаю. Мой босс хочет, чтобы я создал кнопку, которая позволит ему загружать свой ежемесячный файл и генерировать всевозможные вещи одним щелчком мыши. Я новичок в excel vba, и вы увидите здесь каждый шаг проекта, пока я борюсь с вещами. :) - person Amatya; 21.11.2013
comment
Это будет примерно 10-15 строк кода (минус объявления). - person Siddharth Rout; 21.11.2013
comment
зато метод классный! Спасибо!! - person Amatya; 21.11.2013
comment
@Amatya: исправил мой ответ It will be 9 lines of code (including the declarations) - person Siddharth Rout; 21.11.2013
comment
В кодировании Mathematica у них есть соревнования по кодированию в 1 строку. Я думаю, ты будущий чемпион. :) - person Amatya; 21.11.2013