• 최초 작성일: 2003-06-17
  • 최종 수정일: 2026-09-30
  • 조회수: 20 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 엑셀로 전자사전 만들기

들어가기 전에

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

To teach is to learn twice over. 가르치는 것은 곧 두 번 이상을 배우는 것이다.

무엇을 배우는 가장 좋은 방법은 남을 가르쳐 보는 것이랍니다. 답변신공 흠...

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

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

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


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

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

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

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

엑셀로 전자사전 만들기

핵심 요약: 엑셀로 만든 전자사전

입력하는 글자에 맞추어 목록이 자동으로 이동하는 사전은 TextBox의 Change 이벤트와 Like 연산자로 만들 수 있고, 뜻은 VLookup으로 가져옵니다.

  • 1단계: 유저폼에 Label, TextBox, ListBox를 배치하고 RowSource에 이름 정의된 범위를 지정합니다.
  • 2단계: TextBox의 Change 이벤트에서 Like 연산자로 일치하는 목록을 찾아 선택합니다.
  • 3단계: ListBox의 Click 이벤트에서 VLookup으로 뜻을 가져와 Label에 표시합니다.

Step 1: 어떤 질문이었을까요?

TextBox에 문자를 입력할 때마다 현재까지 입력한 문자와 ListBox의 목록을 비교하여, 가장 근접한 항목으로 이동시키고 싶다는 질문이 있었습니다. 도움말에서 검색어의 첫 글자만 입력해도 그 글자로 시작하는 가장 앞선 항목을 보여 주는 것과 같은 동작입니다.

파일 정리하다가… 오래 전에 어떤 분이 올려주신 질문 파일을 발견하였습니다. 아래 버튼을 클릭하면 대화상자가 하나 나타납니다. '찾을 단어' 부분에 알파벳을 입력하면 입력된 문자 조합과 가장 유사한 결과들을 자동으로 보여 줍니다. 일반 전자사전과 마찬가지로 임의의 단어를 클릭하면 그 뜻이 오른쪽에 표시됩니다.

엑셀로 만든 전자사전 유저폼 - 찾을 단어에 bil을 입력하자 bilateral이 선택되고 뜻이 표시된 화면
아이엑셀러

전자사전뿐만 아니라 자신이 알고 있는 정보들을 이러한 형태로 잘 정리해 두시면 자신만의 백과사전도 만들 수 있을 것입니다. 정보화의 출발점은 이와 같은 정보의 체계화 입니다.

흔히 '정보화'라고 하면, 대통령과 공직자들이 노트북 펴놓고 폼나게 화상회의를 하거나 인터넷으로 뭔가 근사한 것을 하는 것으로 생각하는 사람들이 적지 않은 것 같습니다. 또한 '정보'라는 것은 뭔가 거창하고 멀리 있는 것이 아닙니다. 우리 주변에 있는 모든 것이 정보입니다.

동네 사람들의 각종 이벤트를 잘 알고 있는 거지는 절대로 굶어죽지 않습니다. 동네 사람들의 이벤트 일정이 바로 '정보'입니다. 이맘때 쯤 강 상류 어디에 가니까 물고기가 물반 고기반 이더라 하는 것도 정보입니다. 고스톱 칠 때, 패를 받아들고 상대방의 눈치를 살살 보는 것도 정보를 얻기 위한 작업입니다. 본 강좌 파일을 보시는 여러분도 자신만의 정보화 작업을 진행하고 있는 것입니다.

엑셀과 VBA를 열심히 공부하시는 분들, 그래서 자신만이 입수한 정보를 체계적으로 정리하고 분석하는 마인드를 가지신 분은 나중에 노숙자가 된다 하더라도 - 그리 될 확률은 아주 아주 낮아 보입니다만서도 - 끊임없이 자신의 경험을 정보화하여, 하다못해 "노숙자의 심리적 상태 및 자활 문제 연구"와 같은 논문을 써서라도 다시 일어설 것입니다.

엑셀과 VBA를 잘 배워 놓아야 겠다는 생각이 더욱 간절하게 드시지요? ^^

Step 2: 전자사전 만들기

그러면, 전자사전을 어떻게 만드는지 살펴보도록 합니다.

(1) 유저폼에 개체 삽입하기

(1) VB Editor 상태에서 유저폼을 한 장 삽입하고 필요한 개체들을 삽입합니다. 4개의 Label과 1개의 TextBox, 1개의 ListBox 오브젝트가 사용되었습니다. Alt + <F11> 키를 눌러 VB Editor로 이동하신 다음 각 오브젝트들의 이름(Name)이 어떻게 정의되어 있는지 확인해 보시기 바랍니다.

유저폼에 Label 4개, TextBox 1개, ListBox 1개를 배치한 VB Editor 화면
아이엑셀러

(2) 유저폼 초기화 코드

(2) 유저폼의 빈 여백을 더블 클릭한 다음, 유저폼의 Initialize 이벤트를 선택하고 아래와 같은 코드를 작성합니다.

Private Sub UserForm_Initialize()

    With txtInput
    ' 단어를 입력하는 부분인 txtInput TextBox를 초기화하고 입력 시스템을 영문으로 지정합니다.

        .Text = ""
        .IMEMode = fmIMEModeAlpha
    End With
    lstItem.RowSource = "Item"
    ' lstItem 컨트롤의 원본 목록을 지정합니다. 여기서 Item 이라는 것은 프로그래밍을 하기 전에 미리
    ' 정의해 놓은 이름입니다. 워크시트 상태에서 '삽입-이름-정의' 메뉴를 선택하여 확인해 보세요.

    Label1.Caption = "총 단어수 : " & lstItem.ListCount
    lblOutput.Caption = ""

End Sub

(3) 입력할 때마다 목록 찾기 (핵심)

(3) Shift + <F7> 키를 눌러 유저폼으로 돌아옵니다. 이번에는 txtInput 컨트롤을 더블 클릭하고 아래와 같은 코드를 작성합니다. 이 프로시저가 오늘 강좌의 핵심 부분입니다.

Private Sub txtInput_Change()

    Dim i               As Long
    Dim intNum          As Long
    On Error GoTo ET

    With lstItem
        intNum = .ListCount
        ' 리스트 박스에 몇 개의 목록이 있는 지 카운팅하여 intNum 변수에 담아 둡니다.

        For i = 0 To intNum - 1
            If UCase(.List(i)) Like UCase(txtInput.Text & "*") Then
            ' 문자열 비교 연산자인 Like를 사용하여 txtInput 컨트롤에 문자열이 입력될 때마다 lstItem
            ' 리스트의 내용과 비교를 해 나가는 것이 핵심입니다.

                .ListIndex = i
                Exit Sub
            End If
        Next i
    End With

    ' 일치하는 단어가 없을 경우, 메시지를 보여 주고 가장 나중에 입력된 글자를 다시 수정할 수 있게 해 줍니다.
    MsgBox "그런 단어는 없습니다. 다시 확인하세요", , "www.iExceller.com"
    With txtInput
        .SetFocus
        If Len(.Text) > 0 Then
            .SelStart = Len(.Text) - 1
            .SelLength = 1
        End If
    End With
    Exit Sub

ET:
    MsgBox Err.Description, , "에러 번호 : " & Err.Number
    Err.Clear

End Sub

목록 전체를 처음부터 순환하면서 Like 연산자로 입력한 문자열로 시작하는 첫 항목을 찾고, 찾으면 그 항목을 선택한 다음 프로시저를 끝냅니다. 하나도 없으면 안내 메시지를 보여 줍니다.

(4) 목록을 클릭했을 때 뜻 표시하기

(4) 리스트 박스 상에 있는 단어를 직접 클릭했을 경우 그 의미를 오른쪽에 있는 Label에 표시해 주기 위한 코드를 작성합니다.

Private Sub lstItem_Click()

    Dim strTemp As String

    With lstItem
        If .ListIndex < 0 Then Exit Sub
        strTemp = .List(.ListIndex)
        strTemp = Application.VLookup(strTemp, Range("start").CurrentRegion, 2, False)
        ' 다른 방법도 있겠으나 엑셀의 워크시트 함수를 이용하여 입력된 단어의 뜻을 가져오는 방법을
        ' 사용하였습니다.

        lblOutput.Caption = strTemp
    End With

End Sub

설명은 이쯤에서 접어야 겠습니다. 숨겨놓은 트릭이 한 가지 있기는 합니다만... 설명은 이쯤에서 접어야 겠습니다. 직접 찾아보시기 바랍니다. ^^ 직접 만들어 보시고 안되는 부분이 있으면 질문주세요. 사전뿐 아니라 자신이 알고있는 다른 유용한 정보들, 예를 들면 인맥 정보나 거래 내역 등과 같은 것들도 얼마든지 만드실 수 있을 것입니다.

오늘은 여기까지…

정리 — 전자사전 핵심 코드

구분 사용한 코드 역할
목록 지정 lstItem.RowSource = "Item" 이름 정의된 범위를 목록으로
입력 모드 .IMEMode = fmIMEModeAlpha 영문 입력 상태로
찾기 UCase(.List(i)) Like UCase(txtInput.Text & "*") 대소문자 구분 없이 앞부분 일치
뜻 가져오기 Application.VLookup(...) 워크시트 함수로 뜻 검색
오류 처리 MsgBox "그런 단어는 없습니다." 등록되지 않은 단어 안내

자주 묻는 질문 (FAQ)

Q1. TextBox에 입력할 때마다 코드를 실행하려면 어떻게 하나요?

TextBox의 Change 이벤트에 코드를 작성하면 글자를 입력하거나 지울 때마다 프로시저가 실행됩니다.

Q2. Like 연산자는 어떻게 쓰나요?

문자열이 패턴과 일치하는지 비교합니다. 입력한 글자 뒤에 와일드카드 *를 붙이면 그 글자로 시작하는 항목과 일치합니다.

Q3. ListBox의 목록은 어디에서 가져오나요?

RowSource 속성에 이름 정의된 범위를 지정하면 그 셀들의 내용이 목록으로 표시됩니다.

마치며

사전뿐 아니라 인맥 정보나 거래 내역처럼 자신이 가진 정보도 같은 방식으로 체계화해 조회 프로그램으로 만들 수 있습니다.