배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   OR, 필터링, 고급필터
제목:   OR조건 고급필터링
     
 

New Page 2
  STEP> 따라하기


※ 아래 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