AutoFilter object
지정된 워크시트에 대한 자동 필터링을 나타냅니다.
Note
AutoFilter를 날짜와 함께 사용하는 경우 형식은 국가별 설정(".")이 아닌 영어 날짜 구분 기호("/")와 일치해야 합니다. "2/2/2007"은 유효한 날짜 형식이지만 "2.2.2007"은 잘못된 형식입니다.
AutoFilter 개체를 반환하려면 AutoFilter 속성을 사용하고 각 열의 필터 집합을 반환하려면 Filters 속성을 사용합니다. 필터링한 범위 전체를 나타내는 Range 개체를 반환하려면 Range 속성을 사용합니다. 다음은 현재 필터링에 대한 필터링 조건과 주소를 저장한 후 새 필터를 적용하는 예제입니다.
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String
Sub ChangeFilters()
Dim f As Long ' 정수형 변수 f를 선언합니다.
' "Sales" 워크시트를 w 변수에 할당합니다.
Set w = Worksheets("Sales")
' w 워크시트의 자동 필터를 설정합니다.
With w.AutoFilter
' 현재 자동 필터 범위의 주소를 currentFiltRange 변수에 저장합니다.
currentFiltRange = .Range.Address
' 자동 필터 설정을 조작하기 위해 Filters 컬렉션을 사용합니다.
With .Filters
' filterArray 배열을 동적으로 크기를 조정합니다.
ReDim filterArray(1 To .Count, 1 To 3)
' 자동 필터 설정을 순회하면서 정보를 수집합니다.
For f = 1 To .Count
With .Item(f)
' 필터가 활성화되어 있는 경우:
If .On Then
' Criteria1 값을 filterArray 배열에 저장합니다.
filterArray(f, 1) = .Criteria1
' 연산자가 있는 경우:
If .Operator > 0 Then
If .Operator <> 7 Then
' Operator 값을 filterArray 배열에 저장합니다.
filterArray(f, 2) = .Operator
' Criteria2 값을 filterArray 배열에 저장합니다.
filterArray(f, 3) = .Criteria2
Else
End If
Else
End If
Else
End If
End With
Next
End With
End With
' 현재 자동 필터 모드를 비활성화합니다.
w.AutoFilterMode = False
' 워크시트의 "A1" 셀에서 첫 번째 열 (field 1)을 기준으로 값 10250을 필터링합니다.
w.Range("A1").AutoFilter field:=1, Criteria1:=10250
End Sub
워크시트에 대한 AutoFilter 개체를 만들려면 직접 또는 Range 개체의 AutoFilter 메서드를 사용해 워크시트의 범위에 대한 자동 필터링을 켜야 합니다. 다음은 앞의 예제에서 모듈 수준 변수에 저장된 값을 사용해 Sales 워크시트에 대한 원래의 자동 필터링을 복원하는 예제입니다.
Sub RestoreFilters()
Set w = Worksheets("Sales")
Dim col As Long
'자동 필터 모드 해제
w.AutoFilterMode = False
'filterArray를 반복
For col = 1 To UBound(filterArray(), 1)
If Not IsEmpty(filterArray(col, 1)) Then
'Criteria2가 있는 경우
If filterArray(col, 2) Then
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1), _
Operator:=filterArray(col, 2), _
Criteria2:=filterArray(col, 3)
Else
'Creteria1이 배열인 경우
If IsArray(filterArray(col, 1)) Then
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1), Operator:=xlFilterValues
' Criteria1이 배열이 아닌 경우
Else
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1)
End If
End If
Else
End If
Next
End Sub
속성
FilterMode property
워크시트가 자동 필터 상태인 경우 True를 반환하며 읽기 전용인 Boolean입니다.
Syntax
expression.FilterMode
expression : AutoFilter 개체를 나타내는 변수입니다.
다음 코드는 자동필터 모드에 따라 메시지를 출력합니다.
Sub CheckFilterMode()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sales")
' 자동 필터 모드가 활성화되었는지 확인
If ws.AutoFilterMode Then
MsgBox "자동 필터 모드가 활성화되어 있습니다."
Else
MsgBox "자동 필터 모드가 비활성화되어 있습니다."
End If
End Sub
Filters property
자동 필터링된 범위에 있는 필터를 모두 나타내는 Filters 컬렉션을 반환하며 읽기 전용입니다.
Syntax
expression.Filters
expression : AutoFilter 개체를 나타내는 변수입니다.
다음 코드는 변수를 Sales 워크시트에서 필터링된 범위의 열 3에 대한 필터의 Criteria1 속성 값으로 설정하는 예제입니다.
Sub GetFilterCriteria()
Dim c1 As Variant
Dim i As Long
With Worksheets("Sales")
If .AutoFilterMode Then
With .AutoFilter.Filters(3)
If .On Then
c1 = .Criteria1
' c1이 배열인지 확인합니다.
If IsArray(c1) Then
' 배열의 각 요소를 출력합니다.
For i = LBound(c1) To UBound(c1)
Debug.Print c1(i)
Next i
Else
' 단일 값일 경우 그대로 출력합니다.
Debug.Print c1
End If
Else
End If
End With
Else
End If
End With
End Sub
' Output
' =Andrew Fuller
' =Janet Leverling
' =Laura Callahan
Range property
지정한 자동 필터가 적용되는 범위를 나타내는 Range 개체를 반환합니다.
Syntax
expression.Range
expression : AutoFilter 개체를 나타내는 변수입니다.
다음 코드는 자동 필터가 설정된 경우 자동 필터가 적용된 범위를 출력합니다.
Sub ShowAutoFilterRange()
Dim ws As Worksheet
Dim rng As Range
Set ws = Worksheets("Sales")
' 워크시트에 자동 필터가 설정되어 있는지 확인합니다.
If ws.AutoFilterMode Then
' AutoFilter.Range 속성을 사용하여 자동 필터가 적용된 범위를 가져옵니다.
Set rng = ws.AutoFilter.Range
' 범위의 주소를 출력합니다.
Debug.Print "자동 필터가 적용된 범위: " & rng.Address
Else
Debug.Print "이 워크시트에는 자동 필터가 적용되지 않았습니다."
End If
End Sub
Sort property
하나 이상의 정렬 열 및 AutoFilter 컬렉션의 정렬 순서를 반환합니다.
Syntax
expression.Sort
expression : AutoFilter 개체를 나타내는 변수입니다.
Sub SortWithAutoFilter()
Dim ws As Worksheet
' "Sales" 워크시트를 설정합니다.
Set ws = Worksheets("Sales")
' 화면 업데이트를 중지합니다.
Application.ScreenUpdating = False
' 워크시트에 자동 필터가 설정되어 있는지 확인합니다.
If ws.AutoFilterMode Then
With ws.AutoFilter.Sort
' 세 번째 열에 대해 오름차순으로 정렬합니다.
.SortFields.Clear
.SortFields.Add Key:=ws.Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
' 변경사항을 적용하고 데이터를 정렬합니다.
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Debug.Print "데이터가 성공적으로 정렬되었습니다."
Else
Debug.Print "이 워크시트에는 자동 필터가 적용되지 않았습니다."
End If
' 화면 업데이트를 재개합니다.
Application.ScreenUpdating = True
End Sub
매크로 실행 전
매크로 실행 후
메서드
AutoFilter.ShowAllData method
AutoFilter 개체에서 반환하는 데이터를 모두 표시합니다.
Syntax
expression.ShowAllData
expression : AutoFilter 개체를 나타내는 변수입니다.
다음 코드는 필터링이 되어 있는 경우 필터를 해제하고 모든 데이터를 보여줍니다.
Sub ShowAllData()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sales")
' 자동 필터가 적용되어 있고, 실제로 필터링이 되어 있다면,
If ws.AutoFilterMode Then
If ws.FilterMode Then
' 모든 데이터를 다시 보여줌 (필터 제거)
ws.AutoFilter.ShowAllData
End If
End If
Set ws = Nothing
End Sub
매크로 실행 전
매크로 실행 후
관련 글
'Worksheet object' 카테고리의 다른 글
Filter 개체 (0) | 2023.09.11 |
---|---|
Filters 개체 (0) | 2023.09.10 |
Worksheet.FilterMode 속성 (0) | 2023.09.08 |
Worksheet.AutoFilterMode 속성 (0) | 2023.09.08 |
Worksheet.AutoFilter 속성 (0) | 2023.09.08 |