- 최초 작성일: 2003-06-17
- 최종 수정일: 2026-09-30
- 조회수: 20 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 엑셀로 전자사전 만들기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
To teach is to learn twice over. 가르치는 것은 곧 두 번 이상을 배우는 것이다.
무엇을 배우는 가장 좋은 방법은 남을 가르쳐 보는 것이랍니다. 답변신공 흠...
엑셀로 전자사전 만들기
핵심 요약: 엑셀로 만든 전자사전
입력하는 글자에 맞추어 목록이 자동으로 이동하는 사전은 TextBox의 Change 이벤트와 Like 연산자로 만들 수 있고, 뜻은 VLookup으로 가져옵니다.
- 1단계: 유저폼에 Label, TextBox, ListBox를 배치하고 RowSource에 이름 정의된 범위를 지정합니다.
- 2단계: TextBox의 Change 이벤트에서 Like 연산자로 일치하는 목록을 찾아 선택합니다.
- 3단계: ListBox의 Click 이벤트에서 VLookup으로 뜻을 가져와 Label에 표시합니다.
Step 1: 어떤 질문이었을까요?
TextBox에 문자를 입력할 때마다 현재까지 입력한 문자와 ListBox의 목록을 비교하여, 가장 근접한 항목으로 이동시키고 싶다는 질문이 있었습니다. 도움말에서 검색어의 첫 글자만 입력해도 그 글자로 시작하는 가장 앞선 항목을 보여 주는 것과 같은 동작입니다.
파일 정리하다가… 오래 전에 어떤 분이 올려주신 질문 파일을 발견하였습니다. 아래 버튼을 클릭하면 대화상자가 하나 나타납니다. '찾을 단어' 부분에 알파벳을 입력하면 입력된 문자 조합과 가장 유사한 결과들을 자동으로 보여 줍니다. 일반 전자사전과 마찬가지로 임의의 단어를 클릭하면 그 뜻이 오른쪽에 표시됩니다.
전자사전뿐만 아니라 자신이 알고 있는 정보들을 이러한 형태로 잘 정리해 두시면 자신만의 백과사전도 만들 수 있을 것입니다. 정보화의 출발점은 이와 같은 정보의 체계화 입니다.
흔히 '정보화'라고 하면, 대통령과 공직자들이 노트북 펴놓고 폼나게 화상회의를 하거나 인터넷으로 뭔가 근사한 것을 하는 것으로 생각하는 사람들이 적지 않은 것 같습니다. 또한 '정보'라는 것은 뭔가 거창하고 멀리 있는 것이 아닙니다. 우리 주변에 있는 모든 것이 정보입니다.
동네 사람들의 각종 이벤트를 잘 알고 있는 거지는 절대로 굶어죽지 않습니다. 동네 사람들의 이벤트 일정이 바로 '정보'입니다. 이맘때 쯤 강 상류 어디에 가니까 물고기가 물반 고기반 이더라 하는 것도 정보입니다. 고스톱 칠 때, 패를 받아들고 상대방의 눈치를 살살 보는 것도 정보를 얻기 위한 작업입니다. 본 강좌 파일을 보시는 여러분도 자신만의 정보화 작업을 진행하고 있는 것입니다.
엑셀과 VBA를 열심히 공부하시는 분들, 그래서 자신만이 입수한 정보를 체계적으로 정리하고 분석하는 마인드를 가지신 분은 나중에 노숙자가 된다 하더라도 - 그리 될 확률은 아주 아주 낮아 보입니다만서도 - 끊임없이 자신의 경험을 정보화하여, 하다못해 "노숙자의 심리적 상태 및 자활 문제 연구"와 같은 논문을 써서라도 다시 일어설 것입니다.
엑셀과 VBA를 잘 배워 놓아야 겠다는 생각이 더욱 간절하게 드시지요? ^^
Step 2: 전자사전 만들기
그러면, 전자사전을 어떻게 만드는지 살펴보도록 합니다.
(1) 유저폼에 개체 삽입하기
(1) VB Editor 상태에서 유저폼을 한 장 삽입하고 필요한 개체들을 삽입합니다. 4개의 Label과 1개의 TextBox, 1개의 ListBox 오브젝트가 사용되었습니다. Alt + <F11> 키를 눌러 VB Editor로 이동하신 다음 각 오브젝트들의 이름(Name)이 어떻게 정의되어 있는지 확인해 보시기 바랍니다.
(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 속성에 이름 정의된 범위를 지정하면 그 셀들의 내용이 목록으로 표시됩니다.
마치며
사전뿐 아니라 인맥 정보나 거래 내역처럼 자신이 가진 정보도 같은 방식으로 체계화해 조회 프로그램으로 만들 수 있습니다.