EXCEL - VBA

Range.AutoFilter Method(3) - AutoFiterMode, FilterMode

별동산 2023. 3. 6. 08:05
반응형

1. AutoFilterMode 설정 및 해제

AutoFilterMode는 필터가 설정됐는지 여부를 저장한 값입니다. 다시 말해 DropDown Arrow가 표시되면 True이고,

 

없다면 False를 반환합니다.

필터가 해제된 상태

 

ActiveCell.AutoFilter를 실행하면 토글 기능이기 때문에 필터가 설정된 경우는 해제하고, 해제됐다면 설정을 반복합니다.

Sub autofilter_set1()
    ActiveCell.AutoFilter
'    If ActiveSheet.AutoFilterMode = False Then
'        ActiveCell.AutoFilter
'    End If
End Sub

 

그러나 아래 주석을 풀고, ActiveCell.AutoFilter는 주석처리하고 실행하면

Sub autofilter_set1()
'    ActiveCell.AutoFilter
    If ActiveSheet.AutoFilterMode = False Then
        ActiveCell.AutoFilter
    End If
End Sub

 

필터가 설정되지 않은 경우만 필터를 설정합니다.

주의할 점은 AutoFilterMode를 확인할 때는 ActiveCell이 아니라 ActiveSheet를 사용해야 한다는 점입니다.

 

2. FilterMode 여부 확인

FilterMode는 필터뿐만 아니라 조건까지 설정된 경우를 체크하는 기능입니다.

AutoFilter drop-down Arrow(삼각형)가 표시되지만, 조건으로 필터 되지 않았다면(모든 행이 보인다면) AutoFilterMode는 True이지만, FilterMode는 False입니다.

그러나, 조건으로 필터 되었다면 AutoFilterMode, FilterMode 모두 True입니다.

 

아래와 코드를 작성해 보겠습니다.

Sub autofilter_set2()
    If ActiveSheet.FilterMode = True Then
        ActiveSheet.ShowAllData
    Else
        ActiveCell.AutoFilter field:=2, Criteria1:="가락1동"
    End If
End Sub

 

(코드 설명)

ActiveSheet.FilterMode = True란 필터와 조건이 모두 설정된 경우입니다.

아래는 동명을 가락1동으로 제한한 경우, 다시 말해 필터와 조건이 모두 설정된 경우입니다.

필터뿐만 아니라 조건으로 필터링된 상태

 

이 때는 ActiveSheet.ShowAllData라고 해서 필터 - 지우기 메뉴를 누른 것처럼

필터 - 지우기 메뉴
필터 - 지우기를 하면 모든 행이 보입니다.

 

필터가 설정된 상태에서 모든 데이터가 표시됩니다.

필터 - 지우기를 하면 필터가 설정된 상태에서 모든 행이 보임

 

else란 필터가 설정되어 있지 않거나, 필터와 조건 모두 설정되지 않은 경우입니다.

이 때는 ActiveCell.AutoFilter field:=2, Criteria1:="가락1동" 문장을 실행하므로 "현재 셀을 기준으로 필터를 설정한 후 두 번째 필드인 동명을 기준으로 가락1동인 데이터로 필터링"합니다.

 

2. 여러 개 조건을 Array로 부여

가. Criteria1에 Array를 이용하여 여러 가지 필터값 부여

동일한 필드에 적용할 경우는 Array를 사용하여 Criteria1에 필터값을 지정할 수 있는데, 이 때는 Operator로 xlFilterValues를 지정해야 하며, 지정하지 않으면 마지막 값인 '개포1동'만 적용됩니다.

Sub autofilter_set3()
    If ActiveSheet.FilterMode = False Then
        ActiveCell.AutoFilter Field:=2, Criteria1:=Array("가락1동", "개포1동"), Operator:=xlFilterValues
    End If
End Sub

 

위 매크로를 실행하면 아래와 같이 동명이 '가락1동'이거나 '개포1동'인 데이터만 표시되며,

동명을 2가지로 제한한 경우

 

그리고, 이미 동명 필터가 설정된 경우는 필터 - 지우기를 해서 모든 데이터를 보여줍니다.

 

나. AutoFilter 여러 번 실행

필드가 여러 개인 경우는 필드를 달리해서 아래와 같이 조건으로 지정할 수 있으며 이 때는 And 조건으로 적용됩니다.

Sub autofilter_set4()
    If ActiveSheet.FilterMode = False Then
        ActiveCell.AutoFilter Field:=2, Criteria1:="가락1동"
        ActiveCell.AutoFilter Field:=7, Criteria1:="0.04"
    Else
        ActiveSheet.ShowAllData
    End If
End Sub

 

그러면 동명은 '가락1동', 탁도는 0.04로 조건이 적용됩니다. 

숫자라도 큰 따옴표 안에 넣는 점이 특이하고, 이 때는 Operator로 xlFilterValues를 지정하지 않아도 됩니다. 그렇다고 지정해도 에러는 발생하지 않습니다.

동명 조건과 탁도 조건을 모두 만족하는 데이터만 표시됨

 

서울시 지역 시간별 수질 현황(완성3).xlsm
0.17MB

 

반응형