- 최초 작성일: 2005-03-30
- 최종 수정일: 2026-09-30
- 조회수: 15 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 100점짜리 인생을 위하여
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
강좌 제목이 예사롭지가 않군요 ^^; 이것은 얼마 전 인터넷에서 많이 회자되었던, 진대제 정보통신부 장관의 프레젠테이션 관련 내용입니다.
'인생을 100점짜리로 만들기 위한 조건은 무엇일까요'라는 질문에 대한 방법은 이렇습니다. 일단 알파벳 순서대로 숫자를 붙여줍니다. A에 1, B에 2, C에 3, D에 4… 이런 식으로 Z(26)까지 붙입니다. 그런 다음 어떤 단어의 알파벳에 붙여진 숫자를 모두 더해 100이 되는 단어를 찾습니다.
| 단어 | 점수 |
|---|---|
| hard work | 98 |
| knowledge | 96 |
| love | 54 |
| luck | 47 |
| money | 72 |
| leadership | 97 |
| attitude | 100 |
열심히 일한다고, 지식이 많다고, 사랑을 한다고, 운이 좋다고, 돈이 많다고, 리더십이 있다고 100점짜리 인생이 되는 것은 아니고 정답은 attitude, 즉 마음먹기에 따라 인생이 100점이 될 수 있다는 이야기입니다.
100점짜리 인생을 위하여
핵심 요약: 알파벳 점수 계산기 만들기
A=1, B=2, … Z=26으로 계산해 단어의 점수를 구하는 계산기를 배열 수식과 VBA 폼으로 만드는 방법입니다. 대문자 A의 코드 값이 65이므로 64를 빼서 사용합니다.
- 1단계: 워크시트에서는 CODE와 MID, ROW, INDIRECT를 조합한 배열 수식으로 점수를 구합니다.
- 2단계: VBA에서는 글자 수만큼 반복하며 Asc 함수의 값에서 64를 뺀 값을 더합니다.
- 3단계: Select Case로 점수 구간별 안내 메시지를 표시합니다.
Step 1: 워크시트 함수로 계산기 만들기
저는 이 글을 읽으며, 이 분이 언급한 Attitude라는 것이 (일에 대한, 혹은 사물을 대하는) "열정"이 아닐까 생각해 보았습니다.
그러고 보니… 알파벳을 이용해서 진 장관이 소개한 계산기(?)를 만들어 보는 것도 재미가 있을 것 같지요?
아래 셀에 적당한 영문 단어(예: LOVE)를 입력하면 그 옆에 점수가 나타나도록 하려는 것입니다. 이 경우 LOVE는 54점입니다.
하여튼… 사용된 수식을 살펴보도록 하지요.
=SUM(CODE(MID(UPPER(MyCalc),ROW(INDIRECT("1:"&LEN(MyCalc))),1))-64) & "점입니다"
여기서 MyCalc라는 것은 해당 단어를 입력할 곳에 미리 이름 정의를 해 두고 사용한 것입니다. 그리고 수식의 양 끝에 {}가 붙은 것으로 보아… 배열 수식임을 한 눈에 짐작하시겠지요?
그리고 Code 함수는 해당 텍스트에 대한 숫자 코드 값을 구해주는 함수입니다. 대문자 A에 해당하는 숫자 코드 값은 65이고, 소문자 a는 97에 해당됩니다. 이러한 정보를 바탕으로, Row 함수와 Indirect 함수를 조합하여, 입력된 글자 수만큼 1:1로 매칭을 시켜 숫자 코드 값을 알아낸 다음, 합산을 하는 것입니다.
동적 배열을 지원하는 Microsoft 365라면 배열 수식으로 입력하지 않고도 아래와 같이 SEQUENCE 함수로 더 간단하게 만들 수 있습니다.
=SUM(CODE(MID(UPPER(MyCalc), SEQUENCE(LEN(MyCalc)), 1)) - 64) & "점입니다"
이해가 되시지요?
Step 2: VBA로 진대제식 계산기 만들기
이번에는 이것을 조금더 재미있게 만들어 볼까요? VBA를 이용해서 말입니다. 장관님의 이름을 따서 "진대제식 계산기"라고 이름을 붙여 보았습니다.
각 컨트롤에 연결된 이벤트 프로시저에 대해서는 VBE를 열어서 직접 살펴보시고… 여기서는 '확인' 버튼에 연결된 프로시저에 대해서만 설명 드리겠습니다.
Private Sub cmdOK_Click()
Dim intLen As Integer
Dim i As Integer
Dim intNum As Integer
Dim strChar As String
On Error GoTo ET
With Me.TextBox1
If .Text = "" Then Exit Sub
' 아무 단어도 입력하지 않으면 프로시저를 빠져 나갑니다.
intLen = Len(.Text)
' 입력된 단어가 있으면 그 단어의 길이를 intLen 변수에 담아둡니다.
For i = 1 To intLen
intNum = intNum + Asc(UCase(Mid(.Text, i, 1))) - 64
' 이 부분이 핵심입니다. 워크시트 함수를 사용하여 해결한 것과 동일한 로직입니다.
' 즉, 단어의 길이만큼 순환문을 돌면서 Asc 함수를 사용하여 해당 문자의 코드 값을
' 그때 그때마다 intNum 변수에 합산합니다. 여기서 64를 빼 준 이유는…
' 대문자 A의 문자 코드 값이 65이기 때문입니다.
Next i
Me.Height = 201
' 유저폼의 초기화 이벤트에서 유저폼의 크기를 작게 지정하였는데 단어의 결과 점수를
' 표시하기 위해 유저폼의 크기를 키웁니다.
Me.Label1.Caption = UCase(.Text) & "는(은)"
Me.Label2.Caption = intNum & "점 입니다!"
' 다음은 각 점수 구간별 안내 메시지를 표시하기 위한 부분입니다.
With Me.Label3
Select Case intNum
Case 0 To 50
.Caption = "그다지 중요한 일이" & vbCr & "아니로군요!"
Case 51 To 70
.Caption = "좀더 중요한 것을" & vbCr & "찾아보세요!"
Case 71 To 80
.Caption = "이 정도면 만족할만도" & vbCr & "합니다만 조금더 노력을..."
Case 81 To 90
.Caption = "중요한 일이군요." & vbCr & "Go for it!"
Case 91 To 100
.Caption = "아주 중요한 일이군요!"
Case Else
Me.Label1.Caption = ""
Me.Label2.Caption = ""
.Caption = "의미있는 단어로 다시 입력하세요!!"
End Select
End With
.Text = ""
.SetFocus
End With
ET:
If Err.Number <> 0 Then
MsgBox Err.Description, , "에러 : " & Err.Number
Err.Clear
End If
End Sub
응용력을 발휘하셔서 재미있는 것들을 많이 만들어 보시기 바랍니다.
다음 시간에…
정리 — 알파벳 점수 계산기 코드 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 글자 코드 | CODE(문자) / Asc(문자) | 문자의 숫자 코드 값(A=65) |
| 글자 분리 | MID(단어, ROW(INDIRECT("1:"&LEN(단어))), 1) | 글자를 하나씩 배열로 분리 |
| 점수 합산 | intNum + Asc(UCase(...)) - 64 | A=1이 되도록 64를 빼서 합산 |
| 구간 안내 | Select Case intNum | 점수 구간별 메시지 |
| 폼 크기 조정 | Me.Height = 201 | 결과 표시를 위해 폼 확대 |
자주 묻는 질문 (FAQ)
Q1. 대문자 A의 코드 값은 무엇인가요?
대문자 A는 65, 소문자 a는 97입니다. 그래서 A를 1로 만들기 위해 대문자로 바꾼 뒤 64를 뺍니다.
Q2. 소문자로 입력해도 점수가 제대로 계산되나요?
워크시트 수식은 UPPER 함수로, VBA 코드는 UCase 함수로 먼저 대문자로 바꾼 다음 계산하므로 소문자로 입력해도 같은 점수가 나옵니다.
Q3. 한글이나 숫자를 입력하면 어떻게 되나요?
알파벳이 아닌 문자는 코드 값이 달라 점수 범위를 벗어나므로 이 예제에서는 '의미있는 단어로 다시 입력하세요!!' 메시지가 표시됩니다.
마치며
워크시트 함수로 풀던 로직을 VBA로 옮기는 연습을 하면 사용자 정의 폼과 조건 분기까지 한꺼번에 익힐 수 있습니다. 응용력을 발휘해 재미있는 것들을 만들어 보세요.