• 최초 작성일: 2000-12-29
  • 최종 수정일: 2026-09-30
  • 조회수: 14 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 동명이인 검색하기

들어가기 전에

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

이번 시간에도 메일로 받은 질문 하나를 살펴봅니다.

안녕하세요 엑셀러님!
궁금한 것이 생겨서 이렇게 메일을 드리게 되었습니다.
저는 워드로 주소록 관리를 해 왔었는데 엑셀과 엑셀러님을 알고 나서부터는
엑셀로 주소록을 관리하고 있습니다.

VB로 프로그램을 하나 만들려고 하는데 다른 부분은 대충 해결이 가능하나

혹시 엑셀러님이 사용하고 계신 주소록 관리 프로그램이 있으시면 한번 소개해
주실 수는 없을까요?

주소록 관리 프로그램은 언제 시간나면 하나 만든다 만든다 하면서 하루이틀 미루다 보니 아직 못만들고 있습니다. 하지만 동명이인을 검색해 낼 수 있는 간단한 검색 프로그램을 한번 만들어 보도록 하지요. 그동안 강좌를 충실히 따라오신 분이라면 얼마든지 만드실 수 있으리란 생각은 듭니다만…

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

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

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


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

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

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

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

동명이인 검색하기

핵심 요약: 동명이인 검색

이름 영역을 순환하며 같은 이름을 만날 때마다 카운터를 늘리고, 두 번째부터는 계속 검색할지 물어봅니다.

  • 1단계: 이름 영역에 List라는 이름을 정의합니다.
  • 2단계: For Each로 순환하며 입력한 이름과 같은 셀을 찾습니다.
  • 3단계: 두 번째부터는 MsgBox로 확인하고 Offset으로 관련 정보를 표시합니다.

Step 1: 예제 데이터와 이름 정의

주소록 데이터가 아래와 같이 입력되어 있다고 가정합니다. 이름이 있는 B30:B43 영역에는 미리 List라는 이름을 정의해 둡니다.

이름전화번호주소회사명직책
이순신111-1111서울시 영등포구태평양과장
김유신222-2222서울시 용산구삼호물산대리
홍길동333-3333서울시 동작구삼도식품사장
김유신444-4444서울시 종로구태평양부장
이순신555-5555서울시 도봉구삼송양행차장
성춘향666-6666경기도 고양시남해수산사원
심청이777-7777경기도 성남시성남식품경리
월매888-8888서울시 양천구삼성부사장
향단이999-9999강원도 춘천시대우상무
허주니123-1234경기도 하남시현대이사
예지니234-5678경기도 광명시동해수산이사대우
김유신345-6789서울시 강남구태평양대리
이순신456-7890서울시 서초구동양건설주임
홍길동567-8901서울시 양천구남해중공업과장

이런 식으로 얼마든지 가능합니다. 코드를 볼까요?

Step 2: btnOK_Click 프로시저

Private Sub btnOK_Click()
    Dim rngCell As Range
    Dim r As Integer
    r = 1

    For Each rngCell In Range("List")
    '//이름들이 있는 B30:B43까지의 영역에 List라는 이름을 미리 정의해 두고 사용합니다.

        If rngCell = txtName Then
        '//rngCell의 값과 텍스트 박스를 통해 입력받은 값이 서로 같은지를 비교해서 같을 경우
        '//아래 구문을 실행합니다.

            If r > 1 Then
                If MsgBox("동명이인이 있습니다. 계속 검색할까요?", vbYesNo, _
                    "동명이인 발견//Exceller") = vbNo Then Exit Sub
                '//r이 1보다 크다는 것은 같은 값(이름)이 하나 이상이라는 의미이겠지요? 따라서
                '//그럴 경우에는 메시지 박스를 띄우고 사용자가 계속 검색하고자 할 경우에만
                '//다음 작업을 수행합니다.

            End If
            lblPhone = rngCell.Offset(0, 1)
            lblAddress = rngCell.Offset(0, 2)
            lblCompany = rngCell.Offset(0, 3)
            lblGrade = rngCell.Offset(0, 4)
            r = r + 1
        End If
    Next rngCell

End Sub

엄청 간단하지요? 많이 응용하셔서 여러분 자신만의 주소록을 만들어 보도록 하세요. 만들어서 Exceller에게 보내주시면 등록해 드리겠습니다.

마무리

어느덧 내일모레면 올 한해도 가는군요. 아마 이번 강좌가 2000년의 마지막 강좌가 될 것 같습니다. 한해동안 강좌를 보시느라 수고들 많으셨습니다. 주말, 연휴 잘 쉬시고 새로운 마음으로 2001년 새해에 뵙도록 하겠습니다.

Happy New Year!!!

정리 — 동명이인 검색 핵심

구분 사용한 코드 역할
검색 영역 Range("List") 이름이 있는 영역
이름 비교 If rngCell = txtName Then 입력값과 같은 이름 찾기
동명이인 확인 If r > 1 Then MsgBox(..., vbYesNo) 계속 검색 여부
정보 표시 rngCell.Offset(0, 1) 같은 행의 다른 열 값
횟수 세기 r = r + 1 찾은 개수 기록

자주 묻는 질문 (FAQ)

Q1. 동명이인은 어떻게 찾아내나요?

이름 영역을 순환하며 같은 이름을 발견할 때마다 카운터를 늘려, 두 번째부터는 동명이인이 있다고 알려 주면 됩니다.

Q2. 검색한 사람의 전화번호와 주소는 어떻게 가져오나요?

이름 셀에서 Offset 속성으로 오른쪽 셀들의 값을 읽어 옵니다.

Q3. 영역에 이름을 정의하면 어떤 점이 좋은가요?

코드에서 Range("List")처럼 짧게 참조할 수 있고 영역이 바뀌어도 코드를 수정하지 않아도 됩니다.

마치며

간단한 순환문과 카운터만으로 동명이인을 알려 주는 검색 기능을 만들 수 있습니다.