엑셀 다중 필터 명령문 :: Multi_AutoFilter 명령문 사용법 총정리
구문
패치노트
- 2020.01.28 : 필터옵션을 추가하였습니다. (기본값 : xlFilterValues = 값을 기준으로 필터링합니다.)
필요에 따라 아래 옵션으로 필터링할 수 있습니다.- xlFilterCellColor : 셀 배경색상으로 기준으로 필터링합니다.
- xlFilterFontColor : 셀 글자색 기준으로 필터링합니다.
- xlTop10Items : 상위 10개 항목을 필터링합니다. (필터링조건 무시)
- xlTop10Percent : 상위 10% 이내 항목을 필터링합니다. (필터링조건 무시)
그 외 필터옵션에 대한 자세한 설명은 MS홈페이지 관련링크를 참고하세요.
설명
엑셀 Multi_AutoFilter 명령문을 특정 범위에 여러개 조건이 들어간 필터를 쉽게 적용하는 다중필터 함수입니다. 지정한 범위에서 필터링 조건이 비교 될 [기준열]을 지정한 뒤, 사용자가 원하는 필터링옵션(기본값: 값으로 비교) 으로 다중필터를 적용합니다. 만약 필터링옵션으로 상위 5개 항목을 필터링 할 경우, [ Multi_AutoFilter 기준열, 범위, "5", xlTop10Items ] 로 명령문을 입력합니다.
필터링 값으로 여러개 항목이 입력 될 경우, '줄바꿈'을 기준으로 각 항목을 분리합니다. 아래 예제를 보겠습니다.
포도, 키위
파인애플
위처럼 콤마(,)와 줄바꿈으로 각 항목이 분리되어 입력될 시, Multi_AutoFilter는 [ 사과, 배 ] .+ [ 포도, 키위 ] + [ 파인애플 ] 로 줄바꿈으로만 항목을 구분하고 콤마(,)는 항목으로 구분하지 않은채 하나의 값으로 인식합니다.
만약 줄바꿈 외의 다른기호로도 값을 구분해야 한다면, 아래 코드를 명령문에 추가하세요. Multi_Autofilter 명령문의 단계별 동작원리는 영상강의에서 자세히 설명드렸습니다.
'<--! 줄바꿈 기호를 세로바두개(||)로 변경합니다 --> strAll = Replace(FilterValue, Chr(10), "||") strAll = Replace(strAll, Chr(13), "||") '<--! 줄바꿈 외에 다른 기호로도 항목을 구분할경우 추가하세요 --> strAll = Replace(strAll, "기호", "||")
위 코드를 명령문에 추가할 경우, 콤마(,)도 구분자로 분리되어 아래와 같이 정상적으로 각 항목이 구분되어 필터링됩니다.
사과
배
포도
키위
파인애플
Multi_AutoFilter 는 와일드카드를 사용한 필터링도 지원합니다. 와일드카드 검색은 최대 2개까지 지원하며, 와일드카드를 포함한 조건이 3개 이상 입력될 시, 와일드카드 검색 능력을 상실합니다.
- *사* , *파* : '사'와 '파'를 포함한 모든 단어를 필터링합니다.
- 사? : '사'로 시작하는 2글자 단어를 필터링합니다.
- *사*, *파*, *키* : 와일드카드 검색은 최대 2개 조건까지만 가능합니다. 따라서 *사*, *파*, *키*' 가 별표를 포함한 문자열 그대로 필터링됩니다.
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [VBA예제] Multi_AutoFilter :: 목차 만들기 자동화예제파일
엑셀 다중필터 추가기능을 회원자료실로 이동하였습니다.
Multi_AutoFilter 명령문 인수 설명
인수 데이터타입 설명 HeaderCell Range 필터링조건이 들어갈 기준열의 머릿글입니다 rngFilter Range 필터가 적용될 전체 범위입니다 FilterValue String 기준열에 적용할 필터링 조건입니다. 조건이 여러개일 경우 줄바꿈으로 나눠서 입력합니다. FilterType xlAutoFilterOperator 필터링 옵션입니다. 기본값은 '값 기준' 필터링입니다. 명령문 사용예제
Dim FilterRng as Range: Set FilterRng = Sheet1.Range("A1:H100")
'// A1:H100 = 필터가 적용될 전체 범위입니다With Sheet1
'// <--! D열 (지역)에 '회기동, 본동, 대치동' 필터를 적용합니다. -->
Multi_AutoFilter .Range("D1"), FilterRng, . "회기동" & vbNewLine & "본동" & vbNewLine & "대치동"'// <--! H열 (개수)의 상위 10개 항목을 필터링합니다. -->
Multi_AutoFilter .Range("H1"), FilterRng, "10", xlTop10ItemsEnd With
여러개 조건으로 아주 쉽게 필터를 적용할 수 있습니다. Multi_AutoFilter 명령문 전체 코드
Sub Multi_AutoFilter(HeaderCell As Range, rngFilter As Range, FilterValue As String, Optional FilterType As XlAutoFilterOperator = xlFilterValues) Dim strAll As String Dim varStr As Variant: Dim Var As Variant Dim dicVar As Dictionary: Dim varDic As Variant '/* Microsoft Scripting Runtime 라이브러리 추가 */ Dim initCol As Long Dim a As Long: Dim i As Variant: a = 0 Set dicVar = New Dictionary '<--! 줄바꿈 기호를 세로바두개(||)로 변경합니다 --> strAll = Replace(FilterValue, Chr(10), "||") strAll = Replace(strAll, Chr(13), "||") '<--! 배열로 반환한 뒤, Dictionary에 추가 (중복값 제거) --> varStr = Split(strAll, "||") For Each Var In varStr If Not dicVar.Exists(Var) And Len(Var) > 0 Then dicVar.Add Var, Len(Var) End If Next '<--! Dictionary 를 배열로 재반환 --> ReDim varDic(0 To dicVar.Count - 1) For Each i In dicVar.Keys() varDic(a) = i a = a + 1 Next '<--! 필터적용 범위의 시작점 --> initCol = rngFilter.Column '<--! 필터적용 범위를 해당 조건(배열=varDic)으로 필터링합니다 --> rngFilter.AutoFilter _ Field:=HeaderCell.Column - initCol + 1, _ Criteria1:=varDic, _ Operator:=FilterType End Sub
다중 필터 명령문 중요 부분 설명
- FilterValue 로 받아온 필터링 조건의 각 항목을 특정 구분자(기본값: 줄바꿈)를 기준으로 분리합니다.
'<--! 줄바꿈 기호를 세로바두개(||)로 변경합니다 --> strAll = Replace(FilterValue, Chr(10), "||") strAll = Replace(strAll, Chr(13), "||") '<--! 배열로 반환한 뒤, Dictionary에 추가 (중복값 제거) --> varStr = Split(strAll, "||")
- 받아온 항목 중 중복값이 있을 경우를 대비하여, Dictionary 개체를 사용해 고유값만 반환합니다.
For Each Var In varStr If Not dicVar.Exists(Var) And Len(Var) > 0 Then dicVar.Add Var, Len(Var) End If Next '<--! Dictionary 를 배열로 재반환 --> ReDim varDic(0 To dicVar.Count - 1) For Each i In dicVar.Keys() varDic(a) = i a = a + 1 Next
- 지정한 범위에 다중필터를 적용합니다.
'<--! 필터적용 범위를 해당 조건(배열=varDic)으로 필터링합니다 --> rngFilter.AutoFilter _ Field:=HeaderCell.Column - initCol + 1, _ Criteria1:=varDic, _ Operator:=FilterType
- FilterValue 로 받아온 필터링 조건의 각 항목을 특정 구분자(기본값: 줄바꿈)를 기준으로 분리합니다.