• 최초 작성일: 2001-09-29
  • 최종 수정일: 2026-09-30
  • 조회수: 6 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 문자열 분리하기

들어가기 전에

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

이 세상은 참으로 재미있는 곳이라는 생각이 듭니다. Excel이 좋아서, 다른 사람과 경험을 공유하는 것이 좋아서 무작정 시작한 일이 어떻게 하다 보니 이제는 책까지 내게 되었으니까 말입니다. *^^* 자신과 비슷한 생각을 하는 사람들이 있고, 자신의 경험을 그들과 공유한다는 것이 얼마나 즐겁고 신나는 것인지는 해보지 않은 사람은 아마 모를 것입니다. 모쪼록 여러분들도 자신의 경험을 다른 사람과 함께하는 기쁨을 누리시기를 바랍니다.

낼 모레가 추석이군요. 고향에 잘들 다녀오시고 즐겁게 보내시기를 진심으로 기원합니다.

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

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

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


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

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

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

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

문자열 분리하기

핵심 요약: 문자열 분리 원리와 자동화

구분 문자의 위치를 찾고 그 앞뒤를 잘라 내는 방식으로 이름과 전화번호를 분리하며, VBA에서는 InStr 함수로 같은 작업을 반복합니다.

  • 1단계: FIND 함수로 "(" 위치를 찾습니다.
  • 2단계: LEFT와 RIGHT 함수로 이름과 전화번호를 잘라 냅니다.
  • 3단계: VBA에서는 InStr, Left, Right로 순환문을 돌며 나누어 담습니다.

Step 1: 이번 시간의 질문

…()안에 숫자만 잘라서 구하기 함수인데 아무리 생각해도 이해가 안 가네요.
혹시 조금 쉽게 설명해 주실 수 있는지요? 부탁합니다.
특히 마지막 Find 함수가 이해가 안가네요.
=MID(A1,FIND("(",A1)+1,FIND(")",A1)-FIND("(",A1)-1)

언젠가 강좌시간에 설명을 드린 것 같은데… 몇 회에서 였는 지 잘 기억이 나지 않습니다. 누구 찾으신 분 좀 알려주시기 바랍니다. Remind하기 위해서 다시 알아보도록 하지요. 일단 예제 데이터를 만듭니다.

예제 데이터 펼쳐 보기 (Source Data / Name / Phone)
Source DataNamePhone
이순신(051)123-2456이순신(051)123-2456
박경근(02)222-2225박경근(02)222-2225
박유진(02)333-1485박유진(02)333-1485
권예지(02)555-1574권예지(02)555-1574
권율(031)123-1212권율(031)123-1212
최지혜(063)787-1298최지혜(063)787-1298
최지웅(053)123-4567최지웅(053)123-4567
주병규(051)987-1258주병규(051)987-1258
나도몰라(031)946-4527나도몰라(031)946-4527
주정은(051)321-4577주정은(051)321-4577
유필화(02)545-6577유필화(02)545-6577

Name과 Phone 부분에는 아래와 같은 수식이 사용되었습니다.

Name:  =LEFT(B31,FIND("(",B31)-1)
Phone: =RIGHT(B31,LEN(B31)-FIND("(",B31)+1)

Step 2: FIND 함수 이해하기

Find 함수는 텍스트 중에서 지정한 문자열의 위치를 리턴해 주는 함수입니다. 예를 들어 어느 셀에 "Digital dream Company"라는 데이터가 있을 경우,

=FIND("d",B51)   → 9
=FIND("D",B51)   → 1

(B51 셀에는 "Digital dream Company"가 들어 있습니다.)

이와 같이 사용자가 검색하고자 하는 문자열의 위치를 알려주는 것입니다. 이 때 대소문자를 구분해서 검색한다는 사실에 주의하시기 바랍니다.

그렇다면 이제 위의 Name과 Phone 부분에 들어있는 수식을 이해하시겠지요? (부호를 기준으로 이름과 전화번호가 구분되어 있으니까 Find 함수로 위치를 먼저 찾은 다음 Left나 Right와 같은 문자열 함수를 사용하여 발췌를 하면 됩니다. 그래도 수식이 잘 이해가 안되는 분은 수식의 범위를 지정하신 다음 <F9>키를 눌러 즉석 수식 계산 기능을 사용해 보세요.

Step 3: VBA로 자동화하기 (SeparateString)

그런데 가만히 보니까 이번 강좌가 EXCEL 강좌가 아니라 VBA 강좌이지요? 해서 위에서 설명드린 것을 VBA로 자동화시켜 보도록 하겠습니다. 버튼을 눌러 보세요.

코드를 보도록 합니다. 몇 줄 안되는 아주 짧은 코드입니다.

Sub SeparateString()
    Dim rngCell As Range, rngTarget As Range
    Dim strName As String, strPhone As String
    Set rngTarget = Range([Start], [Start].End(xlDown))
    '''등장 인물과 배역을 설정해 줍니다. 소스 데이터의 첫번째 셀에 Start라는 이름을 미리
    '''정의해 두었습니다. 이름을 정의해 두고 사용하면 여러 모로 편리하므로 여러분들도
    '''특별히 바쁜 일이 없는 한 이름을 정의하는 습관을 기르시기 바랍니다. ^^

    [Contents].ClearContents
    MsgBox "내용을 모두 지웠습니다. 이제 이름과 전화번호를 분리합니다!", , "작업 개시//By Exceller"
    '''Contents도 마찬가지입니다. 이름과 전화번호가 들어갈 부분에 이름을 정의해 두었습니다.
    '''Contents라는 영역에 있는 내용들을 모두 지웁니다.

    For Each rngCell In rngTarget
        If InStr(rngCell, "(") > 0 Then
            strName = Left(rngCell, InStr(rngCell, "(") - 1)
            strPhone = Right(rngCell, Len(rngCell) - InStr(rngCell, "(") + 1)
            rngCell.Offset(0, 2) = strName
            rngCell.Offset(0, 3) = strPhone
        End If
        '''이제 순환문을 돌면서 이름과 전화번호를 구분합니다. 위에서 워크시트 상에서
        '''구분할 때 Find 함수를 사용하였었지요? 코드에서도 이 방법을 그대로 사용합니다.
        '''그런 다음에 셀에 나누어 담으면 되는 것이지요. 워크시트 상에서 할 때와 하나도
        '''다를 것이 없습니다.

    Next rngCell
    MsgBox "작업을 완료하였습니다. 잘 되지요?", , "작업 종료//By Exceller"
End Sub

마무리

오늘은 여기까지…

정리 — 문자열 분리 핵심

구분 워크시트 수식 VBA 코드
위치 찾기 FIND("(", B31) InStr(rngCell, "(")
이름 분리 LEFT(B31, FIND("(",B31)-1) Left(rngCell, InStr(rngCell, "(") - 1)
전화번호 분리 RIGHT(B31, LEN(B31)-FIND("(",B31)+1) Right(rngCell, Len(rngCell) - InStr(rngCell, "(") + 1)
대소문자 FIND는 대소문자를 구분 InStr 기본은 구분(vbBinaryCompare)
영역 지정 이름 정의 Start, Contents [Start], [Contents]

자주 묻는 질문 (FAQ)

Q1. 괄호 안의 숫자만 잘라 내는 수식은 어떻게 이해하나요?

FIND로 여는 괄호와 닫는 괄호의 위치를 각각 찾고, MID 함수로 그 사이의 글자 수만큼 가져오는 것입니다.

Q2. FIND 함수는 대소문자를 구분하나요?

네, 구분합니다. "d"와 "D"는 서로 다른 문자로 취급되어 위치가 다르게 반환됩니다.

Q3. 수식이 잘 이해되지 않을 때는 어떻게 하나요?

수식의 일부를 범위로 지정하고 F9 키를 눌러 즉석 수식 계산 기능으로 각 부분의 결과를 확인해 보세요.

마치며

워크시트 수식의 원리를 그대로 VBA로 옮기면 문자열 분리 작업을 한 번에 자동화할 수 있습니다.