2015-07-22 3 views
0

Я пытаюсь отфильтровать три столбца. Пожалуйста, смотрите следующий код:VBA Excel - Фильтровать несколько полей

.Range("$A:$S").AutoFilter field:=1, Criteria1:=Array("Ongoing", "Completed"), Operator:=xlFilterValues 

.Range("$A:$S").AutoFilter field:=4, Criteria1:=Array("AQs", "Prop", "RF", "RP", "SQs"), Operator:=xlFilterValues 

.Range("$A$1:$S$" & ActiveSheet.UsedRange.Rows.Count).AutoFilter field:=10, Criteria1:=">" & _ 
    Format(Date - 7, "mm/dd/yyyy"), Operator:=xlOr, Criteria2:="=Not Known", Operator:=xlOr 

В принципе, я фильтрация поля 1 на основе «текущий» и «полный»; поле 4 на 'aqs', 'prop', 'rf', 'rp' и т. д. Наконец, я хочу отфильтровать все это для дат в течение недели. И значение «Неизвестно».

Он фильтрует по первым двум полям штраф ... но последняя строка фильтра работает неправильно. Я получаю значения «Not Known», и я получаю все, что есть в течение недели сегодня, но я не получаю ничего, что есть на сегодня ... это проблема.

Может ли кто-нибудь помочь?

ответ

0

Определите свой диапазон, а также рабочий лист в поле With ... End With statement, затем используйте определение диапазона для установки всех трех фильтров.

Dim lr As Long, dat As Range, vDATEs As Variant 
ReDim vDATEs(1 To 1) 
vDATEs(1) = "Unknown" 
With Sheets("Sheet3") 
    If .AutoFilterMode Then .AutoFilterMode = False 
    lr = .Cells(Rows.Count, 10).End(xlUp).Row 
    With .Range("$A:$S").Resize(lr, 19) 
     .AutoFilter field:=1, Criteria1:=Array("Ongoing", "Completed"), Operator:=xlFilterValues 
     .AutoFilter field:=4, Criteria1:=Array("AQs", "Prop", "RF", "RP", "SQs"), Operator:=xlFilterValues 
     With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) 
      If CBool(Application.Subtotal(103, .Columns(10))) Then 
       For Each dat In Intersect(.SpecialCells(xlCellTypeVisible), .Columns(10)) 
        If IsDate(dat) Then 
         If dat.Value < (Date - 7) Or dat.Value > Date Then 
          ReDim Preserve vDATEs(LBound(vDATEs) To UBound(vDATEs) + 1) 
          vDATEs(UBound(vDATEs)) = Format(dat.Value, "mm/dd/yyyy") 
         End If 
        End If 
       Next dat 
      End If 
     End With 
     .AutoFilter field:=10, Criteria1:=(vDATEs), Operator:=xlFilterValues 
    End With 
    'If .AutoFilterMode Then .AutoFilterMode = False 
End With 

Вы не можете иметь три критерия в поле Автофильтр, не прибегая к массиву. Создайте массив из отображаемых значений, а затем используйте этот массив для фильтрации вашего последнего поля.

+0

Спасибо за это - он по-прежнему не обеспечивает результат, который мне нужен. чтобы быть ясным, поле 10 необходимо отфильтровать для дат более 7 дней. Поэтому будет показано что-нибудь старше семи дней. Тем не менее, мне также нужны даты до сегодняшнего дня/сейчас ... это не происходит. – GtDriver

+0

Вам нужно будет перебирать даты и строить массив всех дат, исключая 7-дневный период, но включающий Unknown, а затем фильтр в массиве. – Jeeped

+0

Хорошо, я понимаю. Можете ли вы показать базовый синтаксис? – GtDriver

Смежные вопросы