1. 구문
VBA에서 사용하는 AutoFilter 메서드의 구문은 아래와 같습니다.
expression.AutoFilter (Field, Criteria1, Operator, Criteria2, SubField, VisibleDropDown)
ㅇ expression : Range 오브젝트를 반환하는 표현, 예, ActiveCell, Selection, Range("A1") 등
ㅇ Field : filter를 배치하려고 하는 영역의 offset(상대적 위치) 순번(index)으로 목록의 가장 왼쪽이 1 임. 따라서, 목록(list)이 A열부터 시작한다고 하면 A열이 1이지만, B열부터 시작한다고 하면 B열이 1이 됨
ㅇ Criteria1 : 조건1
ㅇ Operator : 필터에 적용되는 조건과 관련된 연산자
이름 | 값 | 설명 |
xlAnd | 1 | 논리 연산자 And |
xlBottom10Items | 4 | 가장 작은 숫자 10개 |
xlBottom10Percent | 6 | 10%의 가장 작은 숫자 |
xlFilterCellColor | 8 | 셀 색 |
xlFilterDynamic | 11 | Dynamic filter |
xlFilterFontColor | 9 | 글자 색 |
xlFilterIcon | 10 | Filter icon |
xlFilterValues | 7 | Filter values(값) |
xlOr | 2 | 논리 연산자 Or |
xlTop10Items | 3 | 가장 큰 숫자 10개 |
xlTop10Percent | 5 | 10%의 가장 큰 숫자 |
ㅇ Criteria2 : 두 번째 조건. 연, 월, 일로 필터링하는 날짜 필드의 단일 기준으로도 사용됩니다. 필터링 Array(Level, Date) 를 자세히 설명하는 배열이 뒤따릅니다. 여기서 Level은 0-2(년,월,일)이고 Date는 필터링 기간 내의 하나의 유효한 날짜입니다. 예) Criteria2:=Array(2, "2019/6/24")
ㅇ SubField : 데이터 형식에 따른 필드. 예를 들어 지리인 경우 인구수
- A1셀에 Seoul이라고 입력한 다음 데이터 탭 > 데이터 형식 그룹 > 지리를 클릭하면
서울 왼쪽에 지도 첩 아이콘이 표시되고, 오른쪽에는 데이터 삽입 버튼이 생깁니다.
데이터 삽입 버튼을 누르면 Population을 클릭하면
인구수가 오른쪽 필드인 B1셀에 추가됩니다.
ㅇ VisibleDropDown : 필터 된 필드에 drop-down arrow(▼ 펼침 화살표)를 표시할 것인지 여부로서 기본 값은 표시하는 True입니다.
2. 사용법
아래 파일을 가지고 작업을 해보겠습니다.
데이터는 아래와 같이 문자열, 숫자, 날짜 형식이 있습니다(총 2916건, 데이터는 가공한 것이므로 신뢰하면 안 됩니다).
먼저 개발 도구 - Visual Basic을 눌러 Visual Basic Editor로 들어간 다음
'서울시 지역 시간별 수질 현황'을 선택하고 모듈을 삽입합니다.
가. expression.AutoFilter
(1) expression
① expression은 범위를 반환하는데 데이터가 있는 범위를 반환해야 하므로 데이터가 없는 부분에 커서가 있으면 안 됩니다.
M1셀에 커서를 놓고 홈 탭 > 편집 그룹에서 정렬 및 필터 아래 필터를 클릭하면 아래와 같이 '범위에서 셀 하나를 선택'하라고 합니다.
② 데이터가 있는 영역의 ActiveCell 또는 Selection이 될 수 있는데 Selection은 선택된 셀인데 전체 데이터 범위가 아닌 부분적인 선택을 하면 안 됩니다. 다만, 제목셀은 2개 이상 선택이 가능합니다.
Sub autofilter_expression1()
ActiveCell.AutoFilter
End Sub
Sub autofilter_expression2()
Range("b2").Select
Selection.AutoFilter
End Sub
Sub autofilter_expression3()
Range("b2:c2").Select
Selection.AutoFilter
End Sub
Sub autofilter_expression4()
Range("b1:c1").Select
Selection.AutoFilter
End Sub
Sub autofilter_expression5()
Rows(1).AutoFilter
End Sub
Sub autofilter_expression6()
Columns(1).AutoFilter
End Sub
③ 데이터가 있는 영역 어디에든 커서를 두고 autofilter_expression1 매크로를 실행하면 제목 셀에 필터가 설정됩니다. 만약 필터가 설정되지 않으면 매크로 실행으로 필터가 해제된 것(토글 기능)이므로 autofilter_expression1 매크로를 실행하면 됩니다.
④ autofilter_expression2 매크로는 커서를 b2셀로 옮긴 다음 b2셀을 기준으로 연속된 범위인 현재 영역을 기준으로 제목 셀에 해당하는 부분에 필터를 설정합니다.
⑤ 그러나, autofilter_expression3는 제목 셀이 아닌 B3에서 C3셀에 필터가 설정되므로 원하는 바가 아닙니다.
⑥ 그렇지만 autofilter_expression4는 제목셀 중 일부에 설정되는 제한이 있지만 그것만 대상으로 한다면 문제는 없습니다.
⑦ autofilter_expression5를 실행하면 1행에 필터가 적용되는데 L1셀에 필터를 적용했다 지워서인지 L1셀까지 필터가 적용됩니다.
L열부터 P열까지 범위를 선택해도 L열의 필터가 해제되지 않습니다. 이 때는 A열부터 K열까지의 데이터를 새 통합문서에 복사해서 붙여 넣는 것이 답입니다.
⑧ autofilter_expression6
'EXCEL - VBA' 카테고리의 다른 글
Range.AutoFilter Method(3) - AutoFiterMode, FilterMode (0) | 2023.03.06 |
---|---|
Range.AutoFilter Method(2) - Field, Criteria, Operator, SubField, VisibleDropDown (0) | 2023.03.03 |
날짜 변환 - DateValue 함수, 선택하여 붙여넣기 VBA(2) (0) | 2023.02.17 |
날짜 변환 - DateValue 함수, 선택하여 붙여넣기 VBA(1) (0) | 2023.02.15 |
엑셀 VBA - XML Parsing(XML 6.0 기준) (4) (LoadXML - 2) (0) | 2023.02.14 |