원본 데이터 범위에서 조건에 맞는 데이터를 검색하고자 할 때 사용합니다.
|
1. 구문
Range.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)
① Field : 가장 왼쪽부터 1번 필드
② Criteria1 : 첫번째 찾을 조건
③ Operator : 필터의 종류를 지정하는 XlAutoFilterOperator 상수 중 하나
④ Criteria2 : 두번째 찾을 조건
⑤ VisibleDropDown : 자동필터 drop down 화살표 표시 유무
|
2. 열거형 xlAutoFilterOperator
Name
|
Value
|
Description
|
xlAnd
|
1
|
Criteria1 과 Criteria2에 대한논리적 AND 연산 결과
|
xlOr
|
2
|
Criteria1 과 Criteria2에 대한논리적 OR 연산 결과
|
xlTop10Items
|
3
|
상위 10 개 아이템
|
xlBottom10Items
|
4
|
하위 10 개 아이템
|
xlTop10Percent
|
5
|
상위 10 퍼센트
|
xlBottom10Percent
|
6
|
하위 10 퍼센트
|
xlFilterValues
|
7
|
값에 대한 필터
|
xlFilterCellColor
|
8
|
셀의 색깔에 대한 필터
|
xlFilterFontColor
|
9
|
글자색에 대한 필터
|
xlFilterIcon
|
10
|
아이콘에 대한 필터
|
xlFilterDynamic
|
11
|
다이나믹 필터
|
3. 기본코드
1) 한개 열_단일조건
Sub 자동필터1()
With Range("A1:F1")
❶ .AutoFilter Field:=3, Criteria1:="수학과", VisibleDropDown:=True
End With
End Sub
-----------------------------------------------------------------------------------------------
❶ 세번째 Field 즉, C열을 기준으로 “수학과”를 선택, 드롭다운 화살표 보이기
|
2) 한개 열_다중조건
Sub 자동필터2()
With Range("A1:F1")
❶ .AutoFilter Field:=4, Criteria1:=">=95", Operator:=xlAnd, _
Criteria2:="<100", VisibleDropDown:=True
End With
End Sub
-----------------------------------------------------------------------------------------------
❶ D열을 기준으로 95점이상 100점 미만 검색, 드롭다운 화살표 보이기
|
3) 여러 열_다중조건
Sub 자동필터3()
With Range("A1:F1")
❶ .AutoFilter 1, Array("2", "3", "4", "5"), xlFilterValues
❷ .AutoFilter 3, "간호학과", xlFilterValues
❸ .AutoFilter 4, ">95", xlOr, "<90"
❹ .AutoFilter 5, ">=80", xlAnd, "<100"
End With
End Sub
-----------------------------------------------------------------------------------------------
❶ A열에서 2, 3, 4, 5 추출
❷ C열에서 “간호학과” 추출
❸ D열에서 90보다 크거나, 100보다 작은수 추출
❹ E열에서 80보다 크거나 같고, 100보다 작은수 추출
|
4) 자동필터 해제
① AutoFilterMode
Sub release_Filter1()
If ActiveSheet.AutoFilterMode Then
ActiveSheet.UsedRange.AutoFilter
End If
End Sub
|
② FilterMode
Sub release_Filter2()
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
Range("A1:G1").AutoFilter
End If
End Sub
|
5) 상위 10
Sub 자동필터4()
If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
With Range("A1:F1")
❶ .AutoFilter Field:=5, Criteria1:="3", Operator:=xlTop10Items
End With
End Sub
-----------------------------------------------------------------------------------------------
❶ 5번 열(E열)에서 상위 3개의 데이터만 추출
|
6) 색기준 필터
Sub 자동필터4()
ActiveSheet.Range("A1:F100").AutoFilter Field:=4, Criteria1:=RGB(255, _
0, 0), Operator:=xlFilterCellColor
End Sub
-----------------------------------------------------------------------------------------------
[A1:F100] 데이터 범위에서 D열이 빨간색인 셀만 표시됩니다.
RGB(255, 0, 0) : RGB 함수는 빨간색, 초록색, 파란색의 값을 사용하여 16진수
색상을 생성합니다. 값의 범위는 0에서 255까지의 정수를 사용 합니다.
|
7) 데이터를 항목별로 시트 생성 예제
Sub makeSheet()
' 변수 선언
Dim rTable As Range
Dim col As Range, i As Long
Dim Unitem As New Collection, item As Variant
Dim Afilter As AutoFilter
Dim copyData As Range
Dim tsht As Worksheet, shtX As Worksheet
' "Main" 시트를 변수에 설정
Set shtX = Worksheets("Main")
' "Main" 시트의 현재 영역을 rTable로 설정
Set rTable = shtX.Range("A1").CurrentRegion
' rTable의 2번째 열을 col로 설정
Set col = rTable.Columns(2)
' 자동 필터가 설정되지 않은 경우 필터 설정
If shtX.AutoFilterMode = False Then rTable.AutoFilter
' Afilter에 현재 자동 필터 설정을 저장
Set Afilter = shtX.AutoFilter
' 오류 발생 시 다음 줄로 이동
On Error Resume Next
' 중복되지 않은 항목을 수집하기 위해 컬렉션에 추가
For i = 2 To col.Cells.Count
Unitem.Add item:=col.Cells(i), Key:=CStr(col.Cells(i))
Next i
' 수집된 각 항목에 대해 반복
For Each item In Unitem
' 동일한 이름을 가진 시트가 이미 있는 경우 삭제
Application.DisplayAlerts = False
Worksheets(CStr(item)).Delete
Application.DisplayAlerts = True
' 필터를 현재 항목으로 설정
rTable.AutoFilter Field:=2, Criteria1:=item
' 필터링된 데이터 복사
Set copyData = rTable.SpecialCells(xlCellTypeVisible)
copyData.Copy
' 새로운 시트 추가 및 이름 설정
Set tsht = Worksheets.Add
tsht.Name = item
' 새로운 시트에 데이터 붙여넣기
With tsht.Range("a1")
.PasteSpecial Paste:=xlPasteColumnWidths
.PasteSpecial Paste:=xlPasteAll
.CurrentRegion.RowHeight = copyData.Cells(1).RowHeight
End With
Next
' "Main" 시트의 필터 해제
Sheets("Main").Range("A1").AutoFilter
Application.CutCopyMode = False
End Sub
|
AutoFilter_createSheetsForItems.xlsm
0.05MB