• 최초 작성일: 2002-03-07
  • 최종 수정일: 2026-09-30
  • 조회수: 14 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: Intersect 메서드에 대하여

들어가기 전에

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

방명록에 김우수님께서 남기신 글입니다.

먼저 운영자님께 깊은 경의를 표합니다. 저는 나이가 좀 많은(52세) 편이지만 그래도 평소 배움의 욕구를 주체하지 못하는 편이랍니다. 마침 제 업무에 EXCEL을 이용해야 하는 부분이 많아 이걸 좀 배워 보려고 서점에서 책도 사고 또 좀 한다는 주위 동료들에게 물어보고 해도 만족할 만한 답을 얻지 못해 항상 불만이 많았는데 우연히 이곳엘 들러보고... 세상에 이렇게 쉽고 또 실무에서 늘 궁금했던 답이... 정말 놀랍군요. 운영자님 진심으로 감사드립니다. 내내 건강하시고 또 행복하세요.

늦었다고 생각될 때가 가장 빠를 때입니다. 배움에는 나이가 없는 것이지요. 모쪼록 엑셀과 VBA를 즐기면서 열심히 하신다면 좋은 결과가 있을 것입니다.

지난 시간에 OnKey 메서드에 대해 설명을 드릴 때 새로 등장한 Intersect 메서드에 대해 대충 설명하고 넘어갔습니다. 도움말을 다들 참고하셨는지 아니면 별 필요성을 못 느껴서인지 이 메서드에 대해 질문을 주신 분이 아무도 없으시군요. ^^ 사실 Intersect 메서드도 잘 활용하면 여러 가지 경우에 활용할 수 있는 아주 재미있는 방법인데 말입니다.

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

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

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


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

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

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

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

Intersect 메서드에 대하여

핵심 요약: Intersect로 선택 금지 영역 만들기

Intersect 메서드는 두 범위의 겹치는 영역을 구해 주며, SelectionChange 이벤트에서 선택 영역과 금지 영역의 교집합이 있으면 다음 셀로 이동시켜 선택하지 못하게 할 수 있습니다.

  • 1단계: 건드리면 안 되는 셀 영역에 이름(NoTouchArea)을 정의합니다.
  • 2단계: 워크시트의 SelectionChange 이벤트 프로시저를 작성합니다.
  • 3단계: Intersect 결과가 Nothing이 아니면 Target.Next.Select로 다음 셀로 이동합니다.

Step 1: 노란색 셀을 선택해 보세요

강좌를 보시는 분 중에 엑셀이나 VBA 말고도 손재간이 있다고 자타가 인정하는 분이 계시리라 생각합니다. 어디 그런 분은 아래의 테이블 중에서 노란 색으로 색칠한 부분을 한번 선택해 보세요. 재주가 있거든… ^^

2000년2001년2002년AverageDifference
1월7408881154.4927.5266.4
2월4452.868.655.115.8
3월492590.4767.5616.6177.1
1/4분기12761531.21990.61599.3459.4
4월673807.61049.9843.5242.3
5월542650.4845.5679.3195.1
6월430516670.8538.9154.8
2/4분기164519742566.22061.7592.2
상반기29213505.24556.836611051.6
7월6808161060.8852.3244.8
8월443531.6691.1555.2159.5
9월1821.628.122.66.5
3/4분기11411369.217801430.1410.8
10월621745.2968.8778.3223.6
11월564676.8879.8706.9203
12월8399.6129.510429.9
4/4분기12681521.61978.11589.2456.5
하반기24092890.837583019.3867.2
년 간533063968314.86680.31918.8

누구 선택에 성공하신 분 계신가요? 워크시트 전체를 범위로 지정하면 되지 않겠느냐구요? 어디 한번 해 보세요! 노란색 셀만 선택하면 달아나고 달아나고… 아마 잘 선택이 안될 것입니다.

이것이 바로 Intersect 메서드를 이용한 것입니다.

Step 2: 만드는 순서

(1) 먼저, 노란색 셀 영역을 지정한 다음 범위명을 지정해 줍니다. 범위명을 어떻게 지정하느냐구요?(이런 분이 있다면 큰 일인데… 농담입니다!) Ctrl 키를 사용하여 범위를 다 지정하신 다음 '삽입-이름-정의' 메뉴에서 적당한 이름을 정해 주시면 됩니다. 또는 수식 입력줄 왼편에 있는 이름 상자(Name Box)에 바로 이름을 입력하고 엔터키를 누르셔도 됩니다.

여기서는 'NoTouchArea'라고 이름을 정의하였습니다. 건들지 말라는 뜻에서…

(2) 그런 다음에 시트 탭을 오른쪽 마우스 버튼으로 누르고 '코드 보기' 메뉴를 선택합니다.

(3) '프로젝트 탐색기'에서 Sheet1(Preface) 오브젝트를 더블 클릭하면 오른쪽에 코드 창이 나타날 것입니다. 코드 창 상단에 있는 드롭다운 버튼을 클릭하여 워크시트 오브젝트의 SelectionChange 이벤트를 선택합니다.

코드 창 상단 드롭다운에서 Worksheet의 SelectionChange 이벤트를 선택하는 VB Editor 화면
아이엑셀러

(4) 아래와 같이 코드를 작성합니다.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'''SelectionChange 이벤트는 여러분이 워크시트 내의 어떤 셀(또는 영역)을 선택할 때마다
'''발생하는 이벤트입니다. SelectionChange 이벤트 핸들러 프로시저는 기본적으로 Target,
'''즉 현재 선택된 셀(영역)을 프로시저의 인수로 함께 전달합니다.

    Dim rngSelect As Range
    On Error Resume Next
    Set rngSelect = Intersect(Target, [NoTouchArea])
    '''문제의 Intersect 메서드가 드디어 나왔군요! Intersect는 '교차하다, 횡단하다, 가로지르다'
    '''라는 의미를 지니고 있습니다. 사전적인 의미에서도 무슨 역할을 하는 메서드인지 짐작이
    '''가시지요?

    '''학교 다닐 때 수학 시간에 맨 처음 배우게 되는 단원이… '집합'입니다.
    '''집합은 또 부분집합, 교집합, 합집합 등으로 나눌 수 있는데 이 중에서 교집합이 바로
    '''Intersect 메서드에 의해 구해지는 영역인 것입니다. 먼 소린지 이해가 안 가신다구요?
    '''아래 그림을 보세요(참 친절하기도 하다!). A라는 집합과 B라는 집합이 있다고 할 때
    '''서로 중복되는 영역(C)이 존재합니다. 서로 겹쳐지는 이 영역을 구해주는 것이 Intersect
    '''메서드입니다.

    If Not rngSelect Is Nothing Then Target.Next.Select
    '''rngSelect가 Nothing 이라는 것은 위의 그림과 같이 서로 겹쳐지는 영역이 없다는 뜻이겠지요?
    '''그런데 앞에 Not 이라는 단어가 붙어 있으므로 중복되는 영역이 있을 경우, 그 다음 셀을
    '''선택하라는 의미입니다.

End Sub

SelectionChange 이벤트는 여러분이 워크시트 내의 어떤 셀(또는 영역)을 선택할 때마다 발생하는 이벤트입니다. SelectionChange 이벤트 핸들러 프로시저는 기본적으로 Target, 즉 현재 선택된 셀(영역)을 프로시저의 인수로 함께 전달합니다.

Step 3: 문제의 Intersect 메서드

문제의 Intersect 메서드가 드디어 나왔군요! Intersect는 '교차하다, 횡단하다, 가로지르다'라는 의미를 지니고 있습니다. 사전적인 의미에서도 무슨 역할을 하는 메서드인지 짐작이 가시지요? 학교 다닐 때 수학 시간에 맨 처음 배우게 되는 단원이… '집합'입니다. 집합은 또 부분집합, 교집합, 합집합 등으로 나눌 수 있는데 이 중에서 교집합이 바로 Intersect 메서드에 의해 구해지는 영역인 것입니다. 먼 소린지 이해가 안 가신다구요? 아래 그림을 보세요(참 친절하기도 하다!). A라는 집합과 B라는 집합이 있다고 할 때 서로 중복되는 영역(C)이 존재합니다. 서로 겹쳐지는 이 영역을 구해주는 것이 Intersect 메서드입니다.

A B C
아이엑셀러

rngSelect가 Nothing 이라는 것은 위의 그림과 같이 서로 겹쳐지는 영역이 없다는 뜻이겠지요? 그런데 앞에 Not 이라는 단어가 붙어 있으므로 중복되는 영역이 있을 경우, 그 다음 셀을 선택하라는 의미입니다.

응용해 보시면 재미난 것을 많이 만드실 수 있을 것입니다.

다음 시간에 또…

정리 — Intersect 메서드 핵심

구분 사용한 코드 역할
이벤트 Worksheet_SelectionChange(ByVal Target As Range) 선택할 때마다 발생
교집합 구하기 Intersect(Target, [NoTouchArea]) 겹치는 영역 반환
오류 대비 On Error Resume Next 교차 영역이 없을 때 오류 무시
판별 If Not rngSelect Is Nothing 겹치는 영역이 있는지 확인
이동 Target.Next.Select 다음 셀로 이동

자주 묻는 질문 (FAQ)

Q1. Intersect 메서드는 어떤 역할을 하나요?

둘 이상의 범위에서 서로 겹치는 부분, 즉 교집합을 구해 줍니다. 겹치는 부분이 없으면 Nothing을 반환합니다.

Q2. SelectionChange 이벤트는 언제 발생하나요?

워크시트에서 셀이나 영역을 선택할 때마다 발생하며 선택된 영역이 Target 인수로 전달됩니다.

Q3. 여러 곳으로 흩어진 영역에 이름을 정의하려면?

Ctrl 키로 영역을 모두 지정한 다음 삽입-이름-정의 메뉴 또는 이름 상자에서 이름을 지정합니다.

마치며

Intersect 메서드는 잘 활용하면 여러 경우에 응용할 수 있는 아주 재미있는 메서드입니다.