※ 아래 Daily Tip은
곽승주님이 제공해주신 내용입니다
고급필터 기능은 강력한 엑셀의 기능 중 하나이지만 직관적이고 손쉽게 사용할 수 있는 자동필터에 자주
마우스 포인터가 가곤 합니다. 오늘은 고급필터를 VBA로 만들어 보고 OR조건으로 필터링 하는 팁을
살펴볼까 합니다.
다음과 같은 목록과 필터링 기준이 담긴
워크시트가 있습니다. 7번째 행부터 목록이 시작되고 1~3행은 필터링 기준으로 사용되는 부분입니다.
가령 다음의 그림은 담당자 직위가 영업으로 시작되는 기준으로
필터링을 하려고 합니다.
고급 필터 대화상자에서 목록 범위에는 데이터 영역(7행 이하)을, 조건 범위에는 조건이
담긴 1~2행을 지정했습니다. 결과는 다음과 같습니다. 아래 그림과 같이 담당자 직위 컬럼에는
'영업~ '으로 시작하는 데이터만 보여줍니다.
이제 VBA코딩을 알아 볼 차례입니다.
코딩에 앞서 데이터 영역인 목록 범위($A$7:$C$98)를 fltRange으로 이름을 지정하고,
조건 범위($A$1:$C$2)를 fltCriteria라고 이름을 지정하고 시작하도록
하겠습니다.
코딩은 비교적으로 간단합니다. 목록범위인
Range개체의 AdvancedFilter메서드를 사용하면 됩니다. 그에 필요한
매개변수는 고급 필터 대화상자에서 본 것과 같습니다.
Sub DoFilter() Dim rngCrit As
Range
Dim rngFilter As Range
With Sheet1
Set rngCrit = .Range("fltCriteria")
Set rngFilter = .Range("fltRange")
End With
rngFilter.AdvancedFilter _
action:=xlFilterInPlace, _
criteriarange:=rngCrit
End Sub |
위에서 조건범위의‘담당자
이름으로 $B$2 셀에 한*을 입력하면 성씨가 '한'씨이고 직위가 '영업'으로 시작하는
데이터만 추출하게 됩니다.
즉 담당자 이름과 담당자 직위가 AND
조건으로 필터링 됩니다. 이제 OR 조건으로 필터링하는 방법을 알아보까요? 가령 성씨가 한씨이거나
담당자 직위가 ‘영업’으로 시작하는 경우 $B$2 셀이 아니라 $B$3 셀에 ‘한*’을 입력하면
됩니다.
즉 같은 행의 조건들은 AND 조건이 되지만 행이 다른 조건들은 OR 조건이 됩니다.
아래 그림에서 조건 범위를 분석하면 (이* AND 영업*) OR (박* AND 대표*)이 됩니다.
성씨가 이씨이며 직위가 ‘영업~’으로 시작하거나 성씨가 박씨이며 직위가 ‘대표~’로 시작하는 데이터만
필터링합니다.
VBA에서는 조건범위가 변하므로
Set rngCrit = rngCrit.CurrentRegion 를 추가하여 조건범위를
확대하도록 변경하여 원하는 결과를 얻을 수 있습니다.
Sub DoFilter() Dim rngCrit As
Range
Dim rngFilter As Range
With Sheet1
Set rngCrit = .Range("fltCriteria")
Set rngFilter = .Range("fltRange")
End With
Set rngCrit = rngCrit.CurrentRegion
rngFilter.AdvancedFilter _
action:=xlFilterInPlace, _
criteriarange:=rngCrit
End Sub |
|