2014-07-10 21 views
1

동적 범위의 셀 값을 사용하여 필터링하려면 vba에서 autofilter를 사용하고 싶습니다.셀 범위로 기준을 가진 VBA의 자동 필터

ActiveSheet.Range("$A$1:$I$954092").AutoFilter Field:=1, Criteria1:=???? _ 
Operator:=xlFilterValues 

나는 당신이 지정하는 방법을 제안 할 수

Range("A1",Range("A1").End(xlDown)) 

같은 세포의 동적 범위를 사용하려면? 나는 Criteria1에 다음을 통과 시도

:

Range(###).Value 
Array(Range(###)) 

예.

Col1 Col2 Col3 Col4 
---------------------------- 
A  1  3  Y 
B  3  3  N 
A  2  2  N 
C  6  1  Y 
B  9  3  Y 

나는 값 Col1A & C과 행을 필터링 할.

+0

고급 필터를 사용하면 여러 기준에서의 필터링이 쉬워집니다. 예를 들어보세요. [여기] (http://www.contextures.com/xladvfilter01.html) – xificurC

+0

고급 필터는 각 데이터 열에 특정 필터가있는 곳에서 작동합니다. 필요한 것은 해당 열 데이터에서 여러 값을 선택하여 단일 열에 대한 필터입니다. – Vamsi

+0

실제로 고급 필터가 작동합니다. 사용해보십시오. 자신의 예제 인'Col1'에 이어 같은 헤더를 가진 데이터 열을 만들고 그 아래에 다음 행에'A'와'C'를 넣으십시오. 이제 데이터에서 고급 필터를 선택하고 필터 기준에서 전체 항목을 열 머리글과 함께 넣습니다. – xificurC

답변

3

@xificurC가 언급했듯이 고급 필터가 트릭을 수행합니다! 다음 코드를 사용하여 범위에 대한 참조를 사용하여 한 번에 여러 값을 필터링 할 수있었습니다.

Range("A1:A6").AdvancedFilter Action:=xlFilterInPlace, 
    CriteriaRange:=Range("A10:A12"), Unique:=False 
0

선호하는 방법을 사용하여 마지막 행을 정의한 다음 해당 값을 함수에서 사용하는 것이 한 가지 방법입니다. 같은 : 나는 강력하게 권합니다

Dim lr As Long 
lr = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
ActiveSheet.Range("$A$1:$I$" & lr).AutoFilter Field:=1, Criteria1:="Foo" 

완전히 길 아래에 잠재적 인 두통을 피하기 위해 범위 참조를받을 수 있습니다, 그러나 이것은 당신이 시작하는 것이다. 우리는 작은 자동 필터에 레코더를 사용하는 경우

+0

당신이 말하는 것은 액티브 시트입니다. 범위 "Foo"로 지정한 Criteria1 매개 변수에 대해 지정하고 싶습니다. – Vamsi

+0

@ Vamsi 글쎄, 당신의 통합 문서 레이아웃을 볼 수 없다는 것을 말해야합니다. ActiveSheet는 VBA 코드에 다른 .Select 또는 .Activate 문이없는 한 사용할 수 있습니다. 그렇게한다면 필터 코드가 실행될 때 자신이 어디에 있다고 생각하는지 알기가 어렵습니다. – sous2817

3

우리는 다음을 참조하십시오

Sub Macro1() 
    Range("A1:C20").Select 
    Selection.AutoFilter 
    ActiveSheet.Range("$A$1:$C$20").AutoFilter Field:=2, Criteria1:=Array(_ 
     "Alice", "Boris", "Mike"), Operator:=xlFilterValues 
End Sub 

그래서 자동 필터Criteria1

의 1 기반의 배열이 원하는 목록이 시트에 말하고자 xx in column A이 목록에서 배열을 만듭니다.

Sub Macro11() 
    Dim N As Long, r As Range 
With Sheets("xx") 
     N = .Cells(Rows.Count, "A").End(xlUp).Row 
     ReDim ary(1 To N) 
     For i = 1 To N 
      ary(i) = .Cells(i, 1) 
     Next i 
End With 

    Range("A1:C20").AutoFilter 
    ActiveSheet.Range("$A$1:$C$20").AutoFilter Field:=2, Criteria1:=ary, Operator:=xlFilterValues 
End Sub 
관련 문제