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

들어가기 전에

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

VBA 강좌 100회를 맞아 격려의 메일을 보내주신 여러 분들께 이 자리를 빌어 감사의 말씀을 드립니다. 10여 분이 축하 메일을 보내 오셨습니다.

우리 몸은 아무리 생각해도 하나의 소우주란 생각이 듭니다. 조금 무리를 하면 뇌로 경고음을 보내옵니다. 이 때 경고를 잘 캐치해서 조치를 취해 주어야 하는데 이 정도야 괜찮겠지 하고 객기를 부리면 이내 큰 탈이 나게 마련입니다.

난데없이 무슨 우주 타령인지 의아하시지요? 지난 목요일 밤부터해서 꼬박 3박 4일 동안 Exceller는 죽다 살아났습니다. 몸이 약간 찌뿌둥 하길래 '이러다 괜찮아 지겠지'하고 버텼더니 아주 제대로 탈이 나지 않았겠습니까. 이제 나이도 나이니 만큼(에구 어르신들께는 죄송 ^^;) 몸이 우리에게 하는 말에 귀를 기울여야 겠습니다. 남의 말에만 귀 기울일 것이 아니라… 하여튼 여러 분들도 환절기에 몸관리 잘 하시기 바랍니다.

VB0099 강좌에서 '문장 내의 특정위치 단어 추출하기'에 대해 설명드린 적이 있습니다. 이번 시간에는 이것을 약간 응용해서 정반대의 기능을 수행하도록 해 보겠습니다. 이름하야 '문장 내의 특정단어만 삭제하기'! ^^

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

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

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


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

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

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

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

문장 내의 특정단어 삭제하기

핵심 요약: 특정 위치 단어 삭제 함수

공백 위치를 찾아 단어를 배열에 담고, 삭제할 순서의 단어만 제외해 다시 이어 붙이면 특정 단어가 빠진 문장을 얻을 수 있습니다.

  • 1단계: Find 함수로 공백 위치를 찾아 단어를 배열 변수에 나누어 담습니다.
  • 2단계: For Each로 단어를 돌며 순서(i)가 X와 다른 단어만 이어 붙입니다.
  • 3단계: X를 생략하면 아무것도 삭제하지 않고 문장을 그대로 반환합니다.

Step 1: 이번 시간의 예제

사용자 정의 함수 CutWord2에 셀과 삭제할 단어의 위치(X)를 넘기면 그 위치의 단어가 빠진 문장을 돌려줍니다. X를 생략하면 문장을 그대로 돌려줍니다.

수식원본 문장결과
=CutWord2(A1,5)LECTURE NO: VB0101(문장 내의 특정단어 삭제하기)//By ExcellerLECTURE NO: VB0101(문장 내의 삭제하기)//By Exceller
=CutWord2(B8,4)감사의 말씀을 드립니다. 10여 분이 축하 메일을 보내 오셨습니다.감사의 말씀을 드립니다. 분이 축하 메일을 보내 오셨습니다.
=CutWord2(B10)우리 몸은 아무리 생각해도 하나의 소우주란 생각이 듭니다.우리 몸은 아무리 생각해도 하나의 소우주란 생각이 듭니다.

VB0099 강좌만 제대로 이해를 하셨다면 이런 것 쯤은 일도 아닐 것입니다만, 그래도 몇 분 정도는 이런 것을 질문해 오시지 않을까 생각했는데 오랜만에 예상이 빗나갔군요. ^^ 다 잘 이해해서 그런 것인지 아니면 대충 눈으로만 이해하고 넘어가셔서 그런지…

기능이 비슷 - 이라기 보다 정반대이지만 극과극은 통하는 법이니까 - 하니까 코드도 대동소이 합니다.

Step 2: CutWord2 함수

Option Base 1
'//배열변수의 하한값 크기를 1로 지정해 주는 명령이었지요?

Function CutWord2(Cell, Optional X As Integer)
'//지난 번과 마찬가지로 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

    Do While Err = 0
        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라는 문자형 배열변수에 문장 내의 각 단어들을 차례대로 대입해 넣는
        '//과정입니다.

    Loop

    For Each varWord In strWord
        i = i + 1
        If i <> X Then strTemp = Trim(strTemp & " " & varWord)
        '//이 부분이 조금 틀릴 것입니다.
        '//선택적 요소인 X의 값과 I 값이 같을 경우에는 이 부분을 실행하지 않으므로 그 위치에
        '//해당하는 단어는 빠지게 되는 원리입니다.

    Next varWord
    CutWord2 = strTemp
End Function

마무리

아직 제 컨디션이 아니라 오늘은 짧게 하고 마칩니다.

다음 시간에…

정리 — 특정 단어 삭제 함수 핵심

구분 사용한 코드 역할
배열 하한 Option Base 1 배열 첨자를 1부터 시작
선택 인수 Optional X As Integer 삭제할 단어의 순서
단어 분리 WorksheetFunction.Find(" ", Cell, intWhat) 공백 위치 탐색
단어 제외 If i <> X Then strTemp = Trim(strTemp & " " & varWord) X번째 단어만 건너뜀
반환 CutWord2 = strTemp 결과 문장 반환

자주 묻는 질문 (FAQ)

Q1. 문장에서 특정 위치의 단어만 삭제하려면 어떻게 하나요?

단어를 배열에 나눠 담고 삭제할 순서만 건너뛰면서 나머지를 다시 이어 붙이면 됩니다.

Q2. Optional 인수를 생략하면 어떻게 되나요?

X가 0이 되어 어떤 단어도 삭제되지 않으므로 문장이 그대로 반환됩니다.

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

모듈의 배열 첨자 하한값을 0이 아닌 1로 지정하는 명령입니다.

마치며

이전 강좌의 단어 추출 함수를 조금만 바꾸면 반대 기능인 단어 삭제 함수도 쉽게 만들 수 있습니다.