이 페이지에서
구문
Multi_AutoFilter 기준열, 필터적용범위, 필터링값, [필터옵션]
인수구분
형식 설명
HeaderCell
필수
Range
필터링 조건이 들어갈 기준열의 머릿글입니다.
rngFilter
필수
Range
필터가 적용될 전체 범위입니다.
FilterValue
필수
String
기준열에 적용할 필터링 조건입니다.
조건이 여러 개일 경우 줄바꿈으로 나눠서 입력합니다.
FilterType
선택
XlAutoFilterOperator
필터링 옵션입니다. 기본값은 '값 기준' 필터링입니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요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
활용 예제
지역 3개 필터 + 상위 10개 항목 필터 적용
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", xlTop10Items
End With
안내사항
실행 전 VBA 편집기의 '도구 → 참조'에서 Microsoft Scripting Runtime 라이브러리를 활성화해야 합니다.
필터링 값은 줄바꿈으로만 항목을 구분하며 콤마(,)는 구분자로 인식하지 않습니다.
와일드카드 검색은 최대 2개 조건까지만 지원하며, 와일드카드를 포함한 조건이 3개 이상이면 와일드카드 검색 기능을 사용할 수 없습니다.
매번 강의 내용 잘 보고있습니다. 감사합니다.
올려주신 강의 질문이 있습니다.
예제 파일로 ctrl+t 표만들기를 적용하면 필터가 제대로 작동을 하는데요.
예제 파일에서 내용 및 열 몇개 추가 및 수정하고는 필터가 제대로 작동을 하는데
여기서 ctrl+t 표만들기로 적용을 하면 계속 오류가 납니다.
'1004 런타임 오류, range 클래스 중 autofilter 메서드에 오류' 메시지가 출력되고
rngFilter.AutoFilter _
Field:=HeaderCell.Column - initCol + 1, _
Criteria1:=varDic, _
Operator:=FilterType
위 코드가 노란색으로 표시가 됩니다.
내용 수정 후 표만들기를 적용하는 방법은 없을까요?
감사합니다.
본 명령문은 표기능과 상관없이 잘 동작합니다.
말씀하신 오류는 Multi_AutoFilter 명령문 인수를 잘못 입력하셔서 발생한듯 합니다.
예제파일의 '테스트_명령문'에 작성된 명령문을 확인해보시겠어요?^^
만약 열을 새로 추가하셨다면, 명령문의 첫번째인수인 HeaderCell 인수도 같이 변경해주셔야 합니다.
제 답변이 도움이 되셨길 바랍니다.
감사합니다.
"OLED 회로설계 Orcad FPGA TFT FAE 영어 중국어"
하나의 셀에 "OLED 회로설계 Orcad FPGA TFT FAE 영어 중국어" 가 입력되어 있으면,
[ *회로설계* ]
이렇게 검색하시면 회로설계를 포함하는 값을 모두 필터링합니다.
DX9310-WH01KR
이런 식으로 노트북 다중 필터 검색 하면 하나도 안 되네요
배열 크기에 상관없이 잘 동작합니다.
작성한 명령문에 잘못된 부분이 없는지 다시 한번 확인해보세요.
배열 크기에 상관없이 잘 동작합니다.
작성한 명령문에 잘못된 부분이 없는지 다시 한번 확인해보세요.
해당 다중 필터 부분을 다른 매크로 형식에 넣어서 여러항목이 검색되도록 매크로 세팅을 하고 싶은데요. 해당 매크로 형식을 어떤 부분에 넣어햐 할지 애매해서요. 그냥 검색하고자 하는 셀을 설정해서 기존 매크로 밑에 매크로를 추가하면 될까요?
추가기능 제작에 대한 내용은 아래 위캔두 프리미엄 워크샵 강의를 참고해보세요.
https://www.oppadu.com/엑셀-live-64강/
현재 VBA를 사용하여 Pivot Table을 자동으로 생성하는 것까지 완료하였습니다.
추가적으로 Filter 항목을 VBA로 구현할 수 있는지 문의 드립니다.
Pivot Table에서 아래와 같이 해당월을 제외를 할려고 하는데
----------------------------------------------------------------------------------------------
With ActiveSheet.PivotTables("피벗 테이블1").PivotFields("Date")
' .PivotItems("7/3/2023").Visible = False
' .PivotItems("7/4/2023").Visible = False
End With
----------------------------------------------------------------------------------------------
RawData에서 "7/5/2023" 하나가 추가되거나 "7/42023" 이 삭제되어 있으면
당연히 Error가 납니다.
Date로 정리된 Pivot Table에서 TEXT(TODAY(),"yyyy-mm") 값을 인식하여 2023-07에 해당하는 것만 False 처리할 방법이 있을가요?
목적은 Date에서 해당월(7월)만 제외한 값들만 보기 위함입니다.
피벗테이블의 각 항목을 우선 배열로 받아온 후, 배열의 각 값을 년/월로 변환하여 해당 월의 항목을 필터에서 제외 하도록 구현하면 될 것 같습니다.
매크로 편집기 실행 - [도구] 탭 - [참조] 에서
Microsoft Scripting Runtime
을 체크한 후 다시 실행해보시길 바랍니다.
감사합니다.