• 최초 작성일: 2004-09-14
  • 최종 수정일: 2026-09-30
  • 조회수: 9 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 문장 내 특정글자 서식변경

들어가기 전에

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

Dell의 경영철학 가운데 '5초간 기뻐하고 5시간 반성하라'는 슬로건이 있다고 합니다. 엄청난 실적을 거둔 직원에게도 칭찬은 짧게 하고 더 나은 방법을 찾도록 독려한다는 이야기입니다. 소위 '잘' 나갈 때일수록 경계를 늦추지 말아야 할 일입니다.

질문 하나

안녕하세요? vb를 공부하다 얼마전에 엑셀러님의 사이트를 알게된 사람입니다. find 메소드에 대한 좋은 강좌도 잘 보았습니다. 그런데 흔히 웹상에서 검색할 때 처럼 검색된 결과물 중에서 해당 검색어의 색깔을 다르게 하고 싶은데요... vba로 가능할까요? 예를 들어 find 메소드를 이용하여 '강아지'가 포함된 행을 따로 추려낼 때 추려낸 결과물 중에서 같은 셀 안의 다른 단어의 글자색은 그냥 두고 검색어인 '강아지'를 빨간 색으로 할 수 있을런지요?

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

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

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


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

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

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

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

문장 내 특정글자 서식변경

핵심 요약: 셀 안의 검색어에만 서식 지정하기

웹에서 검색할 때처럼 셀의 문장 속에서 검색어와 일치하는 글자만 빨간색 굵은 글씨로 표시하는 VBA 코드입니다. 이미 서식이 지정된 글자는 원래대로 되돌립니다.

  • 1단계: InputBox로 검색어와 검색 범위를 입력받습니다.
  • 2단계: InStr 함수로 셀 안에서 검색어의 위치를 찾습니다.
  • 3단계: Characters(위치, 길이).Font 속성으로 서식을 지정하고 다음 위치부터 다시 찾습니다.

Step 1: 연습용 시트 만들기

연습용 시트를 하나 만들어서 테스트 해 보도록 하지요. 아래 버튼을 누르세요!

버튼을 클릭하니까 시트가 새로 만들어지고 특정한 문자열에 대해서는 지정한 지정한 서식이 설정되지요?

먼저 시트를 생성하고 데이터를 옮기는 프로시저를 작성합니다. 여러 곳에서 공통으로 사용할 상수는 프로시저 바깥에 선언합니다.

Const strURL As String = "www.iExceller.com"
' 여러 곳에서 공통으로 사용할 상수를 선언합니다.

Sub TransferData()
' 먼저 시트를 생성하고 데이터를 옮기는 프로시저를 작성합니다.

    Dim rngCell As Range

    Worksheets("Preface").UsedRange.Copy
    Worksheets.Add after:=Sheets(Sheets.Count)
    Range("A1").PasteSpecial xlPasteValues
    ActiveWindow.DisplayGridlines = False

    Set rngCell = ActiveSheet.Range("A1").Offset(0, 7)

    ' 버튼을 만들고 프로시저를 연결하는 과정입니다.
    Range("A1").Select
    With rngCell
        With ActiveSheet.Buttons.Add(.Left, .Top, .Width * 2, .Height * 2)
            .OnAction = "ChangeFormat"
            ' 실제로 서식을 바꾸어 주는 것은 외부에 있는 ChangeFormat 프로시저입니다.

            .Caption = "여기를 누르세요!"
        End With
    End With
    MsgBox "연습용 시트를 만들었습니다. 버튼을 누르세요!", , strURL

End Sub

Step 2: 특정 문자열의 서식 바꾸기

다음은 사용자가 지정한 문자열에 대해 서식을 변경하는 프로시저입니다.

Sub ChangeFormat()

    Dim rngCell As Range
    Dim rngTarget As Range
    Dim rngDefault As Range
    Dim strWord As String
    Dim intFind As Integer
    Dim intLen As Integer
    Dim intStart As Integer
    On Error Resume Next

    strWord = InputBox("검색할 단어를 입력하세요! ""강아지""라고 넣어 볼까요?", strURL, "강아지")
    ' 서식을 변경할 단어를 입력받습니다. 기본값으로 '강아지'라는 단어가 들어가도록 설정하였습니다.

    intLen = Len(strWord)
    If strWord = "" Then Exit Sub
    Set rngDefault = ActiveSheet.UsedRange
    Set rngTarget = Application.InputBox("검색 범위를 지정하세요!", strURL, Type:=8, Default:=rngDefault.Address)
    ' 검색 대상 영역을 설정합니다. 기본값으로 UsedRange, 즉 현재 시트에서 사용된 범위를
    ' 대상 영역으로 하였습니다.

    For Each rngCell In rngTarget
    ' 이제부터 For Each ~ Next 순환문을 이용하여 영역 내의 모든 셀을 대상으로 '강아지'라는
    ' 문자열이 들어있나 없나 찾은 다음, 발견될 경우 서식을 변경합니다.

        intStart = 1

        Do While InStr(intStart, rngCell, strWord)
        ' 한 셀 안에 여러 개의 같은 문자열이 있을 경우에 대비, Do ~ Loop 순환문을 한번더
        ' 사용합니다.

            intFind = InStr(intStart, rngCell, strWord)
            ' 찾고자 하는 단어가 문장 내에서 몇번째에 위치하는가를 파악하여 intFind 변수에
            ' 담아두고...

            With rngCell.Characters(Start:=intFind, Length:=intLen).Font

                ' 검색한 단어의 Bold 속성이 지정되어 있지 않다면 굵은 글씨, 붉은색으로 지정합니다.
                ' Bold 속성이 이미 지정되어 있으면 해제하고 글씨색을 검정색으로 바꿉니다.
                If .Bold = False Then
                    .Bold = True
                    .ColorIndex = 3
                Else
                    .Bold = False
                    .ColorIndex = 1
                End If
            End With

            intStart = intFind + intLen
            ' 다음 단어가 있을 경우 검색을 위해 해당 단어수만큼 더해 줍니다.

        Loop
    Next rngCell

End Sub

많이 응용해 보시기 바랍니다.

다음 시간에 또...

정리 — 특정 글자 서식 변경 코드 핵심

구분 사용한 코드 역할
검색어 입력 InputBox(...) 서식을 바꿀 단어 입력
범위 입력 Application.InputBox(..., Type:=8) 검색 범위를 마우스로 선택
위치 찾기 InStr(intStart, rngCell, strWord) 검색어의 시작 위치
서식 지정 rngCell.Characters(Start, Length).Font 일부 글자만 서식 지정
반복 Do While InStr(...) 한 셀 안의 여러 검색어 처리

자주 묻는 질문 (FAQ)

Q1. 셀 안에서 일부 글자에만 서식을 지정할 수 있나요?

네, Range 개체의 Characters(Start, Length) 속성으로 셀 안의 일부 글자를 지정한 뒤 Font 속성을 설정하면 됩니다.

Q2. 한 셀에 검색어가 여러 번 나오면 어떻게 하나요?

찾은 위치에 검색어 길이를 더한 값을 다음 검색 시작 위치로 삼고 Do While 문으로 InStr 검색을 반복하면 모든 검색어에 서식을 지정할 수 있습니다.

Q3. 대소문자를 구분하지 않고 찾으려면 어떻게 하나요?

InStr 함수의 마지막 인수로 vbTextCompare를 지정하면 대소문자를 구분하지 않고 검색합니다.

마치며

InStr 함수로 위치를 찾고 Characters 속성으로 서식을 지정하는 조합만 익혀 두면 웹 검색처럼 검색어를 강조하는 기능을 쉽게 만들 수 있습니다.