본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #75 [ 필터링 구현하기 ]

by 일등미노왕국 2023. 10. 16.

 

이러한 문제를 VBA로 풀려면 이벤트 + 고급필터로 풀면된다.

앞서 이러한 문제는 많이 했기 때문에 찾아보면 이해가 금방갈 것이다.

 

이벤트 구간이다.

이벤트의 영역을 구한 후 이벤트 영역에 TARGET이 들어올때만 작동하게 된다.

 

출력 영역을 초기화 하고, 입력된 이벤트구간에서 입력을 마치면 엔터를 치게 되면 다음줄로 영역이 내려가는데

TARGET.ACTIVATE를 하게 되면 트릭으로 다음줄로 내려갔다가 다시 복귀를 하게 되어 마치 제자리에 있는것처럼 보이게 된다.

 

이렇게 불러진 기초방75코드를 보자

 

바로 고급필터 조건을 정한 후, 고급필터를 실행해도 되지만 그럴경우 고급필터의 내용이 아무것도 없을 때는 출력이 되지 않는다.

더보기
Option Explicit

Sub 기초방75()

    Dim rngAll As Range: Set rngAll = [b9].CurrentRegion   '= DATA 영역
    Dim rngX As Range: Set rngX = [j9:l9]                  '= 출력영역
    Dim rngF As Range: Set rngF = [j6:l7]                  '= 필터조건
    
  
    Application.EnableEvents = False
        If WorksheetFunction.CountBlank([b7:d7]) = 3 Then
            
                rngAll.Copy [j9]
                
        Else
            rngAll.AdvancedFilter xlFilterCopy, rngF, rngX         '= 고급필터
            
        End If
    
    Application.EnableEvents = True
    
    
End Sub

 

해서 조건절로 조건구간의 COUNTBLANK가 3이면 (모두 비어있으면) 전체 영역을 뿌려주고, 그렇지 않으면 고급필터를 실행하라는 조건문으로 고급필텅의 조건문이 모두 비어 있을 때 전체 데이터를 출력하는 것을 구현할 수 있다.

기초방75.xlsm
0.02MB

 

365 함수식은 이렇다.

1. 필터함수

2. 영역지정

3.  IF (조건영역이 모두 비어 있으면 [조건영역1 = 조건영역1 ] -> 모두 표시해라,

4.  그렇지 않으면 조건에 맞게 FILTER해라

5. 만일 못찾으면 [없음]을 표기해라

 

댓글