Условный фильтр Excel VBA

простой вопрос VBA. Мне нужна подпрограмма VBA, которая будет фильтровать мои данные на основе условия (в данном случае, если значение в столбце C равно 11-Jun-12 [41071 в числовой форме]) без перебора всего набора данных. Я немного изучил фильтрацию в Интернете, но, кажется, ничего не совсем то, что я хочу (или я просто не понимаю, что происходит). Чтобы было ясно, вот пример того, что я хочу:

Я хочу http://imgur.com/qebVv

чтобы перейти на http://imgur.com/zDncq.

Спасибо!


person jrad    schedule 30.07.2012    source источник
comment
Почему бы просто не использовать автоматический фильтр? Существуют настраиваемые фильтры даты (последняя опция в фильтрах даты), в которых есть выбор не равно и средство выбора даты   -  person Ross Larson    schedule 30.07.2012
comment
Хорошо, скажем, я хотел полностью удалить эти строки. Нет ли другого способа сделать это, кроме как перебирать каждую строку?   -  person jrad    schedule 30.07.2012
comment
В чем я не уверен. Вероятно, нет, но это никоим образом не 100% уверенный ответ.   -  person Ross Larson    schedule 30.07.2012
comment
Вы можете легко удалить результат автофильтра. Таким образом, в этом случае вы можете использовать автофильтр для 11 июня 2012 г. и удалить результаты. Просто выполните ActiveSheet.AutoFilter.Range.Delete и ActiveSheet.ShowAllData, чтобы показать то, что не соответствует фильтру.   -  person Jon Kelly    schedule 30.07.2012
comment
@JonKelly, не могли бы вы написать для меня весь макрос? Я никогда не работал с автофильтрацией в VBA, поэтому не знаю, как ее форматировать.   -  person jrad    schedule 30.07.2012
comment
@JackRadcliffe Я написал это в ответе ниже   -  person Jon Kelly    schedule 30.07.2012


Ответы (2)


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

Sub DateFilter()
    'hide dialogs
    Application.ScreenUpdating = False
    'filter for records that have June 11, 2012 in column 3
    ActiveSheet.Cells.AutoFilter Field:=3, Criteria1:="6/11/2012"
    'deletes all matching rows
    ActiveSheet.AutoFilter.Range.Delete
    Application.ScreenUpdating = True
End Sub
person Jon Kelly    schedule 30.07.2012

Джек Рэдклифф,

Вы имеете в виду простой автофильтр, например:

Sub SimpleColumnDateFilter1()

' Quick Recorded Macro
' Select a Column
' Activate Autofilter
' For a range C1 through the rest of C
' Autofilter such that the column will display dates not equal to 11/15/2012

Columns("C:C").Select
Selection.AutoFilter
ActiveSheet.Range("C:C").AutoFilter Field:=1, Criteria1:= _
    "<>11/15/2012", Operator:=xlAnd
End Sub
person DotNetDeveloper    schedule 30.07.2012
comment
Да, это то, что я пытаюсь сделать. Однако это дает мне ошибку, и я не уверен, почему. В любом случае, Росс Ларсон (я думаю) прояснил для меня ситуацию в исходном посте. Спасибо! - person jrad; 30.07.2012
comment
Джек, этот базовый пример должен работать эффективно. Сейчас я просто работаю над тем, чтобы сделать его более модульным. ~ДжОЛ - person DotNetDeveloper; 30.07.2012