2012-04-26 1 views
2

필터링 된 항목이없는 Excel 필터의 기준을 반복하는 방법을 찾고 있습니다 (즉, 모든 기준이 설정되어 있음). 필터가 활성화되면, 모든 기준으로 액세스 할 수있는 배열 형 건에 첨가 그러나VBA : 비활성 엑셀 필터의 조건을 반복합니다?

for each criteria in ActiveSheet.AutoFilter.Filters(filterColumn).Criteria1 

필터가 활성화되지 않을 때, 상기 Criteria1 및 Criteria2 방법 날 오류 및 돈을주고 아무것도 반환하지 않는 것 같습니다. 모든 기준을 반복 할 수있는 방법이 없다는 것은 어리석은 것처럼 보이지만 지금까지는 찾지 못했습니다.

+0

변수 crtnme에 수 자궁강한다 그냥 activecell.value = ""다음 셀로 이동 하시겠습니까 ?? – Andrew

+0

@superadamwo이 것은 단순히 특정 열의 고유 한 값을 얻는 것과 동일하지 않습니까? (이는 사소한 문제입니다)? – Zairja

답변

1

당신이 그때 당신은 단순히 당신이 다음 2 개 이상의 조건이있을 때이

Option Explicit 

Sub sample() 
    Dim rRange As Range 
    Dim iFiltCrit As Long 

    'Remove any filters 
    ActiveSheet.AutoFilterMode = False 

    Set rRange = Range("A1:B8") 

    With rRange 
     .AutoFilter Field:=1, Criteria1:="=1" 

     Debug.Print Sheet1.AutoFilter.Filters(1).Criteria1 
    End With 

    'Remove any filters 
    ActiveSheet.AutoFilterMode = False 
End Sub 

처럼를 검색 할 수 있습니다 선택된 1 개 또는 2 기준을 가지고 할 수 있습니다 루프가 배열에 저장되어있는대로 언급 한 바와 같이 .

문제는 필터가 비활성 상태 인 것입니다. 즉, 모든 조건이 메모리에서 지워지는 것을 볼 수 있습니다. 이 예제를 참조하십시오. 모든 데이터를 표시하려면 ActiveSheet.ShowAllData을 사용하고 있습니다.

enter image description here

Option Explicit 

Sub sample() 
    Dim rRange As Range 

    'Remove any filters 
    ActiveSheet.AutoFilterMode = False 

    Set rRange = Range("A1:B8") 

    With rRange 
     .AutoFilter Field:=1, Criteria1:="=1" 

     Debug.Print ">"; Sheet1.AutoFilter.Filters(1).Criteria1 

     '~~> Show all data 
     ActiveSheet.ShowAllData 

     Debug.Print ">>"; Sheet1.AutoFilter.Filters(1).Criteria1 
    End With 

    'Remove any filters 
    ActiveSheet.AutoFilterMode = False 

End Sub 

스냅 그래서 난 당신이 모든 데이터를 표시하면 해당 정보를 더 이상 검색 할 수 있다고 생각합니다.

0

는 처음 Activesheet 필터의 개수를 찾을 로직

  1. 아래를 참조하십시오.
  2. 필터가 특정 컬럼에 적용하면,이 카운트에 따라 그 각각의 열
  3. 에 적용되는 방법 많은 기준 계산됩니다의 기준 이름은 당신이
Set Sht = ActiveSheet 
With Sht.AutoFilter 
    For i = 1 To .Filters.Count 
    If .Filters(i).On Then 
     Sheets("Filter").Cells(j, 1).Value = .Range(6, i).Column 'header starts from 6th row 
     A = .Filters(i).Count 
     If A = 1 Then 
     crtnme = .Filters(i).Criteria1 
     msgbox(crtnme) 
     ElseIf A = 2 Then 
     crtnme = .Filters(i).Criteria1 
     crtnme = crtnme & "|" & .Filters(i).Criteria2 
     msgbox(crtnme) 
     Else 
     For k = 1 To A 
     crtnme = crtnme & "|" & .Filters(i).Criteria1(k) 
     Next 
     msgbox(crtnme) 
     End If 
    End If 
    Next i 
    End With