• 최초 작성일: 2007-05-29
  • 최종 수정일: 2026-09-30
  • 조회수: 8 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 자동 필터 응용 예제

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

자동 필터 응용 예제

핵심 요약: 담당자를 클릭하면 자동 필터 적용

담당자 이름 위에 겹쳐 놓은 사각형 도형에 매크로를 연결해, 클릭하면 Source 시트에서 해당 담당자로 자동 필터링되도록 만드는 예제입니다.

  • 1단계: 셀 크기와 같은 사각형 도형을 삽입하고 Master 매크로를 연결합니다.
  • 2단계: Application.Caller로 클릭된 도형을 찾고 TopLeftCell 값을 읽습니다.
  • 3단계: 값을 Filter 프로시저에 넘겨 자동 필터 조건으로 사용합니다.

Step 1: 어떤 질문이었을까요?

질문 하나

첨부 파일 중, 1번 시트에 있는 박스 내의 항목에 하이퍼링크를 걸어서 해당 내용을 2번 시트에서 자동 필터가 되어 나타나게 하려는데 너무 어렵습니다. (사실 VBA는 까막눈이거든요)

예를 들어, 1번 시트에서 '김 담당'을 클릭하면, 2번 시트로 넘어가서 성명 필더의 '김담당'이 자동 필터되어 나타나게 할려고 합니다. 죄송스런 말이지만, 코드에 설명도 덧붙여 주시면 안될까요? 단순히 복사해서 쓰는 것보다 스스로 공부를 해 보고 싶어서 그러니 귀찮으시더라도 도움 부탁드립니다.

이런 문제는 자동 필터보다 고급 필터를 사용하시면 VBA로 코딩을 할 필요도 없을 것 같기도 합니다만, 일단 출제 의도(?)에 충실하여 해결해 보도록 하지요.

아래의 노란색 셀을 클릭하면 선택된 담당별로 Source 시트에 필터링 됩니다. 각 셀을 클릭하여 확인해 보세요.

김담당이담당박담당
최담당강담당오담당

(다른 것은 잘 모르겠고…) 희안한 것이 하나 있습니다. 어떻게 셀을 클릭했는데 매크로가 실행이 되는 것일까요? 아주 오래 전 강좌에서 소개를 드린 기억이 나는데… 이것은 약간의 트릭을 사용한 것입니다.

즉, 셀에 직접 매크로를 연결시킬 수는 없으므로 셀 크기와 정확히 일치하도록 도형(사각형)을 삽입한 다음 여기에 매크로를 연결한 것입니다. 각 담당명을 마우스 오른쪽 버튼으로 클릭하고 '매크로 지정' 명령을 선택해 보면 다음과 같이 매크로가 연결되어 있음을 알 수 있습니다.

담당명 셀 위의 사각형 도형에서 마우스 오른쪽 버튼을 눌러 매크로 지정을 선택한 화면
아이엑셀러

Step 2: 코드 살펴보기

작성된 코드를 살펴보도록 하지요.

Sub Master()
    Dim strX As String
    strX = ActiveSheet.Rectangles(Application.Caller).TopLeftCell.Value
    ' Application.Caller 속성을 이용하여 선택된 사각형 아래에 있는 담당이름을 파악합니다.

    Filter strX
    ' Filter라는 외부 프로시저를 호출합니다. 이 때 Caller 속성을 이용하여 알아낸 담당이름을
    ' 함께 건네 줍니다.

End Sub

Master 프로시저에서 호출한 외부 프로시저(Filter)의 내용은 이렇습니다.

Sub Filter(strX As String)
' Master 프로시저로부터 넘겨받은 변수를 가져와서 실행합니다. 만약 B26 셀이 선택되었다면
' 매개변수 strX에는 '김담당'이라는 문자값이 저장되어 있을 것입니다.

    Dim rngStart As Range
    Dim rngSource As Range

    Set rngStart = Range("Start")
    Set rngSource = rngStart.CurrentRegion

    Application.Goto rngStart, False
    Selection.AutoFilter
    rngSource.AutoFilter Field:=1, Criteria1:=strX
    ' 자동 필터를 설정할 때 필터 기준으로 strX 변수값을 이용합니다.

    MsgBox strX & " 을 기준으로 필터링 하였습니다"

End Sub

Selection.AutoFilter를 먼저 실행하는 이유: AutoFilter는 실행할 때마다 자동 필터를 켰다 껐다 하는 토글 방식으로도 동작합니다. 이 코드는 시작 셀을 선택하고 먼저 Selection.AutoFilter를 실행해 이미 적용되어 있는 필터 상태를 정리한 다음, 새 조건으로 다시 필터를 적용합니다.

Rectangles 대신 Shapes를 쓰면 더 좋습니다. 원본의 ActiveSheet.Rectangles(Application.Caller)는 사각형 도형만 대상으로 합니다. 도형 종류가 섞여 있어도 동작하게 하려면 ActiveSheet.Shapes(Application.Caller).TopLeftCell.Value로 쓸 수 있습니다.

코드는 간단하지만 응용해 보시면 재미있는 것을 많이 만드실 수 있을 것입니다.

다음 시간에…

정리 — 클릭 자동 필터 코드 핵심

구분 사용한 코드 역할
클릭한 도형 찾기 Application.Caller 매크로를 실행한 도형의 이름을 반환
도형 아래 셀 값 .TopLeftCell.Value 도형이 놓인 셀의 담당자 이름
프로시저 호출 Filter strX 담당자 이름을 인수로 전달
필터 적용 rngSource.AutoFilter Field:=1, Criteria1:=strX 첫 번째 열을 기준으로 필터링
범위 지정 Range("Start").CurrentRegion 데이터 목록 전체 영역

자주 묻는 질문 (FAQ)

Q1. 셀을 클릭했을 때 매크로를 실행할 수 있나요?

셀에는 매크로를 직접 연결할 수 없습니다. 이 예제처럼 셀과 크기가 정확히 같은 도형을 겹쳐 놓고 도형에 매크로를 연결하면 셀을 클릭한 것처럼 사용할 수 있습니다.

Q2. Application.Caller는 무엇을 돌려주나요?

매크로를 실행시킨 개체의 정보를 반환합니다. 도형에 연결된 매크로라면 그 도형의 이름을 알려 주므로 어떤 도형이 클릭되었는지 알 수 있습니다.

Q3. VBA 없이 같은 작업을 할 수 있나요?

네, 자동 필터보다 고급 필터를 사용하면 VBA 코딩 없이도 조건에 맞는 데이터를 뽑아낼 수 있습니다. 이번 강좌는 질문의 의도에 맞춰 VBA로 풀어 본 예제입니다.

마치며

코드는 간단하지만 도형과 Application.Caller를 응용하면 재미있는 것을 많이 만들 수 있습니다. 여러분의 업무에 맞게 응용해 보세요.