• 최초 작성일: 2001-03-23
  • 최종 수정일: 2026-09-30
  • 조회수: 5 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 문장 내의 특정위치 단어 추출하기

들어가기 전에

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

얼마 전 EXCEL 강좌시간에 문장 내의 단어수를 카운팅하는 방법에 대해 소개해 드린 적이 있습니다. Space가 몇 개 있나를 먼저 파악한 다음, 전체 문자열 수에서 Space 문자수를 빼버리면 되었지요? 그런 걸 언제 가르쳐 줬어? 하시는 분들은 X0191 강좌를 살펴 보세요. ^^

이 원리를 약간 응용하면 문자열에서 특정 위치에 있는 단어만 추출하는 것도 가능할 것입니다.

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

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

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


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

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

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

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

문장 내의 특정위치 단어 추출하기

핵심 요약: CutWord 함수

공백을 기준으로 단어를 배열에 담고 지정한 순서의 단어를 돌려주는 함수이며 순서를 생략하면 전체 문자열을 돌려줍니다.

  • 1단계: Find 함수로 공백 위치를 찾으며 단어를 strWord 배열에 담습니다.
  • 2단계: 에러가 발생하면 순환문을 빠져 나옵니다.
  • 3단계: 순서 인수가 있으면 해당 단어를, 없으면 전체 문자열을 돌려줍니다.

Step 1: 사용 방법

셀에 =CutWord(A1,5), =CutWord(B3,1), =CutWord(B10)과 같이 입력합니다. 첫 번째 인수는 문자열이 들어 있는 셀, 두 번째 인수는 추출할 단어의 순서이며, 두 번째 인수를 생략하면 문자열 전체를 돌려줍니다.

Step 2: CutWord 함수

코드를 보도록 하지요. 아주 간단합니다.

Option Base 1
'//Option Base는 배열의 하한값을 지정해 줄 때 사용합니다. 무슨 소리냐 하면,
'//Dim strName(10) As String이라고 선언을 했다면 strName 배열변수는 strName(1),
'//strName(2),…strName(10) 이렇게 10개가 만들어지는 것이 아니라 strName(0)부터
'//생성이 되므로 총 11개의 변수가 생성되는 것입니다.

'//그런데 위와 같이 Option Base 1이라는 문장을 사용하면 배열변수가 0부터 만들어지는
'//것이 아니라 1부터 만들어지게 됩니다.
'//Option Base 문은 모듈 내에서 한번만 선언할 수 있으며, 차원(배열의 크기)을 포함한
'//배열 선언 앞에 있어야 합니다. 대개 모듈시트의 도입부에 위치시킵니다.

Function CutWord(Cell, Optional X As Integer)
    '//Optional X 어쩌고… 하는 새로운 것이 하나 나왔지요?
    '//이것은 Optional Arguments라고 하는 것으로 우리말로 번역하면 선택적 요소라고
    '//번역을 하면 될려나?

    Dim strTemp As String
    Dim strWord() As String
    Dim intNum As Integer
    Dim intWhat As Integer, intFrom As Integer
    Dim i As Integer
    Dim varWord As Variant
    intWhat = 1
    On Error Resume Next
    '//등장인물을 결정하고 On Error Resume Next라는 구문을 넣어 줍니다.

    Do While Err = 0
    '//Do While Err=0라는 것은 에러가 발생하지 않으면 계속 순환문을 실행하라는 뜻입니다.
    '//그러다가 에러가 발생하면… 그렇지요! 위에서 On Error Resume Next라고 하였으니까
    '//그 다음 문장을 실행하게 되겠지요?

        intFrom = Application.WorksheetFunction.Find(" ", Cell, intWhat)
        intNum = intNum + 1
        ReDim Preserve strWord(intNum)
        strWord(intNum) = Mid(Cell, intWhat, IIf(Err, Len(Cell) + 1, intFrom) - intWhat)
        intWhat = intFrom + 1
        '//위의 코드는 strWord라는 동적 배열변수에 지정한 문자열의 각 단어들을 하나씩
        '//담아두기 위한 것입니다. 물론 이 때 단어를 구분해 내는 기준은 문자열 중에 Space가
        '//있느냐 없느냐로 판단하게 됩니다.

        '//아마 그냥 눈으로만 보아서는 어떻게 돌아가는지 파악이 안 될 것입니다.
        '//종이를 한장 펼쳐 놓고, intWhat이 1일 때, intFrom은 얼마, intNum은 1, 따라서
        '//strWord(1)에는 "AAA"라는 문자열이 저장되고… 하는 식으로 적어나가다 보면
        '//쉽게 이해하실 수 있으리라 생각됩니다.

    Loop

    If X = 0 Or IsMissing(X) Then
        strTemp = Cell
    Else
        i = X
        strTemp = strWord(i)
    End If
    '//IsBlank, IsText, IsError, Cell 함수 등과 같이, 특정 형태의 정보가 유효한 지 아닌지를
    '//판단하게 도와주는 함수를 Information Functions(정보함수)이라고 합니다.
    '//위에서 사용된 IsMissing 함수도 정보함수 중 하나입니다. 이것은 함수 이름에서도
    '//알 수 있듯이, Optional Arguments에 어떤 (유효한) 값이 들어왔나 안들어왔나를
    '//체크한 다음, 들어왔을 경우에는 A라는 작업을 수행하고 그렇지 않을 경우 다른 어떤
    '//작업을 수행토록 하기 위한 함수입니다.

    CutWord = strTemp
End Function

마무리

오늘은 여기까지…

정리 — CutWord 핵심

구분 사용한 코드 역할
배열 하한 Option Base 1 배열 첨자를 1부터
선택 인수 Optional X As Integer 생략 가능한 인수
오류 처리 On Error Resume Next 에러 시 계속 진행
공백 찾기 WorksheetFunction.Find(" ", Cell, intWhat) 다음 공백 위치
결과 반환 CutWord = strTemp 추출한 단어

자주 묻는 질문 (FAQ)

Q1. Option Base 1은 무엇인가요?

배열 첨자의 기본 하한을 0이 아니라 1로 지정하는 문장으로, 모듈의 배열 선언 앞에 한 번만 사용할 수 있습니다.

Q2. Optional 인수는 무엇인가요?

함수를 호출할 때 생략할 수 있는 인수를 말하며 생략했는지는 IsMissing 등으로 확인할 수 있습니다.

Q3. 단어 수를 세는 방법은?

전체 글자 수에서 공백을 뺀 글자 수를 빼면 공백 개수를 알 수 있고 여기에 1을 더하면 단어 수가 됩니다.

마치며

공백 위치를 하나씩 찾아 배열에 담아 두면 문장에서 원하는 순서의 단어를 자유롭게 꺼낼 수 있습니다.