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동'인 데이터만 표시되며,
그리고, 이미 동명 필터가 설정된 경우는 필터 - 지우기를 해서 모든 데이터를 보여줍니다.
나. 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를 지정하지 않아도 됩니다. 그렇다고 지정해도 에러는 발생하지 않습니다.
'EXCEL - VBA' 카테고리의 다른 글
Range.AutoFilter Method(5) - 필터된 영역에 붙여넣기(1) (0) | 2023.03.08 |
---|---|
Range.AutoFilter Method(4) - SpecialCells(xlCellTypeVisible)(1) (2) | 2023.03.07 |
Range.AutoFilter Method(2) - Field, Criteria, Operator, SubField, VisibleDropDown (0) | 2023.03.03 |
Range.AutoFilter Method(1) - expression.AutoFilter (0) | 2023.03.02 |
날짜 변환 - DateValue 함수, 선택하여 붙여넣기 VBA(2) (0) | 2023.02.17 |