EXCEL - VBA

Range.AutoFilter Method(1) - expression.AutoFilter

별동산 2023. 3. 2. 08:24
반응형

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. 사용법

아래 파일을 가지고 작업을 해보겠습니다.

서울시 지역 시간별 수질 현황.xlsx
0.15MB

 

 

데이터는 아래와 같이 문자열, 숫자, 날짜 형식이 있습니다(총 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

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

반응형