- 최초 작성일: 2002-03-12
- 최종 수정일: 2026-09-29
- 조회수: 21 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 구간별 요금표 만들기2
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
지난 시간에 만든 퀵 서비스 회사는 잘 운영이 되고 있나요? ^^
구간별 요금표 만들기2
핵심 요약
- 콤보 박스에서 출발지와 도착지를 선택하면 Find 메서드로 해당 행·열을 찾아 요금 셀을 선택할 수 있습니다.
- 선택된 요금 셀에는 글꼴·배경색을 적용하고 메모를 표시해 사용자가 결과를 쉽게 확인하도록 만들 수 있습니다.
- 별도 ResetFormats 프로시저로 이전 강조 서식과 메모를 지워 다음 검색을 위한 화면을 초기화합니다.
강좌가 나가고 난 후 Exceller 옆에 앉아 있는 후배 직원이 이런 질문을 해 왔습니다.
황모군: 근데요… 콤보 박스로 지역을 선택하면 구간별 요금뿐 아니라 해당 셀까지 선택이 되도록 할 수 있나요?
Exceller: 어, 그래? 거 참 좋은 생각이군! 한번 만들어 봐! 오늘 중으로… 황모군: (눈만 꿈뻑 꿈뻑하며)… 다신 질문 하나봐라! (← 거의 이런 말이 나오기 직전이었음) 말은 이렇게 했지만… Exceller는 누구한테 숙제 내놓고 자기는 안하는 그런 타입은 아니지요! ^^
아래의 콤보 박스를 클릭해서 검색하고자 하는 지역을 선택해 보세요. 불가능은 없습니다. 방법을 (자기가) 모르고 있을 따름입니다. 하고자 하는 의지만 있다면 어떻게든지 방법을 찾아내는 것이 또한 인간이지요!
| From | To |
| 3 | 6 |
| 6 | 3 |
| =INDEX(A31:A40,B24) | =INDEX(B30:K30,0,C24) |
㈜달려라 막달려라 구간별 배송 요금표
| 지역 | 강남 | 강동 | 용산 | 강서 | 관악 | 영등포 | 구로 | 금천 | 노원 | 도봉 |
| 강남 | 5000 | 10000 | 14000 | 16000 | 10000 | 10000 | 12000 | 13000 | 14000 | 15000 |
| 강동 | 10000 | 5000 | 14000 | 19000 | 15000 | 8000 | 16000 | 17000 | 15000 | 16000 |
| 용산 | 14000 | 14000 | 5000 | 17000 | 14000 | 11000 | 11000 | 15000 | 16000 | 8000 |
| 강서 | 16000 | 19000 | 17000 | 5000 | 13000 | 18000 | 11000 | 12000 | 18000 | 17000 |
| 관악 | 10000 | 15000 | 14000 | 13000 | 5000 | 13000 | 8000 | 9000 | 16000 | 16000 |
| 영등포 | 10000 | 8000 | 11000 | 18000 | 13000 | 5000 | 16000 | 16000 | 11000 | 11000 |
| 구로 | 12000 | 16000 | 11000 | 11000 | 8000 | 16000 | 5000 | 7000 | 17000 | 18000 |
| 금천 | 13000 | 17000 | 15000 | 12000 | 9000 | 16000 | 7000 | 5000 | 18000 | 18000 |
| 노원 | 14000 | 15000 | 16000 | 18000 | 16000 | 11000 | 17000 | 18000 | 5000 | 7000 |
| 도봉 | 15000 | 16000 | 8000 | 17000 | 16000 | 11000 | 18000 | 18000 | 7000 | 5000 |
사실 이것은 VBA 강좌 시간에 설명을 드려야 할 것이나 예제 데이터가 지난 번 EXCEL 강좌의 연장선 상에 있는 것이므로 그냥 여기서 설명드리도록 합니다. 위 두 개의 콤보 박스에는 이런 코드가 매달려 있습니다.
Sub SelectCell()
Dim strFrom As String, strTo As String
Dim strResult As String
Dim lngX As Integer
Dim intY As Integer
Dim Msg As String
strFrom = [From].Value
strTo = [To].Value
lngX = [X].Find(strFrom).Row
intY = [Y].Find(strTo).Column
'''코딩을 하기 전에 범위에 이름을 정의해 두었습니다. 이름 상자를 클릭하여
'''어떤 이름이 있는 지, 범위를 어떻게 지정하였는지 살펴보시기 바랍니다.
'''Find 메서드를 이용하여 콤보 박스에서 선택된 값의 행과 열 번호를 알아낸 다음 lngX, intY라는
'''변수에 담아둡니다.
ResetFormats
'''ResetFormats라는 외부 프로시저를 호출합니다. 이것은 기존의 서식을 삭제하기 위한 것입니다.
Cells(lngX, intY).Select
With Selection
With .Font
.Bold = True
.ColorIndex = 2
End With
.Interior.ColorIndex = 3
Msg = Msg & "[" & strFrom & "]에서 [" & strTo & "]까지의 구간 요금은 " & Chr(10)
Msg = Msg & Format(Selection.Value, "#,##0") & " 원 입니다."
.AddComment Msg
.Comment.Visible = True
'''선택된 셀에 메모를 삽입하고 Visible 속성값을 True로 지정합니다. 즉 메모가 항상 화면상에 나타나도록
'''설정하는 것입니다.
End With
ActiveWindow.ScrollRow = 20
End Sub
이번에는 위의 프로시저에서 호출한 ResetFormats 프로시저의 내용… 따로 설명드릴 부분은 없어 보입니다. MyRange라는 영역(위 테이블의 구간별 요금이 들어있는 모든 셀)을 차례로 순환하면서 셀 색상과 글자 속성이 지정되어 있으면 해제합니다.
Sub ResetFormats()
Dim rngCell As Range
Dim rngTarget As Range
Set rngTarget = [MyRange]
On Error Resume Next
For Each rngCell In rngTarget
With rngCell
If .Interior.ColorIndex = 3 Then .Interior.ColorIndex = xlNone
If .Font.Bold = True Then .Font.Bold = False
If .Font.ColorIndex = 2 Then .Font.ColorIndex = 1
'''셀 배경색이 빨간색이면 색상을 해제… 글자가 진하게 표시되어 있으면 해제…글자 색상이 흰색으로
'''설정되어 있으면 검정색으로 바꾸어 줍니다.
.Comment.Visible = False
.ClearComments
'''입력되어 있는 메모를 제거합니다.
End With
Next rngCell
End Sub
많이들 응용해 보세요. 그러다 기발한 아이디어가 생각나면 연락주시는 것, 잊지 마시고…
정리 — Find 메서드로 요금 셀 자동 강조하기
| 단계 | 처리 내용 |
|---|---|
| 1. 위치 탐색 | [X].Find, [Y].Find로 선택된 출발지·도착지의 행/열 번호 파악 |
| 2. 서식 초기화 | ResetFormats 호출로 이전 강조 서식·메모 제거 |
| 3. 셀 강조 | Cells(lngX, intY) 선택 후 글꼴·배경색 지정 및 메모 추가 |
| 4. 화면 이동 | ActiveWindow.ScrollRow로 결과가 보이는 위치로 화면 스크롤 |
자주 묻는 질문 (FAQ)
Q1. 콤보 박스에서 선택한 지역에 해당하는 셀을 VBA로 어떻게 찾나요?
미리 정의해 둔 이름 범위([X], [Y])에 대해 Find 메서드를 사용해 콤보 박스에서 선택된 값의 행 번호와 열 번호를 알아낸 뒤, Cells(행,열)로 해당 요금 셀을 선택합니다.
Q2. 선택된 요금 셀에 결과를 어떻게 표시하나요?
선택된 셀에 글꼴을 굵게, 배경색을 강조 색상으로 지정하고, AddComment로 구간과 요금 정보를 담은 메모를 추가한 뒤 Comment.Visible을 True로 설정해 항상 화면에 보이도록 합니다.
Q3. 이전 검색에서 강조했던 서식과 메모는 어떻게 지우나요?
ResetFormats 프로시저가 요금표 전체 범위(MyRange)를 순회하면서 배경색·굵은 글꼴·글자색이 남아있으면 해제하고, 남아있는 메모도 함께 제거해 다음 검색을 위한 화면을 초기화합니다.
마치며
워크시트 함수만으로 만든 요금표에 Find 메서드를 이용한 VBA 코드를 더하면, 선택한 구간의 요금 셀까지 자동으로 찾아 강조해 주는 한층 더 친절한 도구가 됩니다. 다음 시간에…