- 최초 작성일: 2002-03-08
- 최종 수정일: 2026-09-29
- 조회수: 30 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 구간별 요금표 만들기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
이번 시간에는 "퀵 서비스 회사"를 하나 만들어 보도록 하겠습니다. 웬 난데없는 퀵 서비스 회사냐구요? 혹시 퀵 서비스 회사로부터 홍보를 해 달라는 명목으로 커미션이라도 받았느냐구요?? 그동안 강좌를 진행해 오면서도 아직 그런 청탁은 받아 본 기억이 없습니다. 애석하게도... ^^;;
구간별 요금표 만들기
핵심 요약
- 출발지와 도착지를 콤보 박스로 선택하고 MATCH와 OFFSET을 조합해 교차 지점의 배송 요금을 찾습니다.
- TEXT와 문자열 연결을 이용하면 선택한 구간과 요금을 읽기 쉬운 문장 형태로 표시할 수 있습니다.
- 콤보 박스의 연결 셀, 이름 정의, 개체와 수식 연결 등을 함께 활용해 구간별 요금 조회표를 구성합니다.
그러면 왜 퀵 서비스 회사를 만드느냐구요? ... 아무런 이유도 없답니다. 자… 퀵 서비스 회사를 만들려면 무엇을 제일 먼저 해야할까요? 사람들마다 견해가 다를 수 있지만, Business Model의 수익성 분석을 맨 먼저 해야하지 않을까 싶습니다(아니면 말고…). 그러자면 각 구간별 배송 요금표를 마련해야 할 것입니다. 여기서는 예로 들기 위해 10개의 구간별 요금표를 만들어 보았습니다만, 대개의 경우 회사별로 25~30개 정도의 구간을 운행합니다. 따라서 고객이 배송요금을 물어오면 한참 들여다 보아야 찾을 수 있을 것입니다. 그러는 동안 우리의 고객은 경쟁사 전화 번호를 찾고 있을 지도 모릅니다.
㈜달려라 막달려라 구간별 배송 요금표
| 지역 | 강남 | 강동 | 용산 | 강서 | 관악 | 영등포 | 구로 | 금천 | 노원 | 도봉 |
| 강남 | 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 |
** 이 조견표는 마음대로 수정할 수 없습니다. 아래의 콤보 박스에서 적당한 구간을 선택해 보세요.
| From | To | Fare |
| 6 | 3 |
| =INDEX(A28:A37,B45) | =INDEX(B27:K27,0,C45) |
아마 어디에 어떤 수식이 들어있고, 각 수식간의 상관 관계가 어떻게 되는지 도무지 짐작조차 가지 않는 분이 계실 것입니다. 우선, 두 개의 콤보 박스는 B45, C45 셀과 각각 연결되어 있습니다. 그리고 B45, C45 셀의 위치값을 문자열로 치환시켜 주기 위해 Index 함수를 사용해 주었는데 이 수식은 B46, C46 셀에 들어 있습니다. 다만 글자 색상을 배경색과 같은 색으로 지정해 주었기 때문에 눈에 보이지 않을 따름입니다.
그리고 오늘 강좌에서 가장 중요한 구간별 요금을 계산하기 위한 수식은 아래와 같습니다. 이 수식은 C45 셀에 들어 있습니다. 셀 포인터를 C45 셀로 이동시켜서 확인해 보세요.
=B46 & "에서 " & C46 & "까지 요금은 " & TEXT(OFFSET(A27,MATCH(B46,A28:A37,0),MATCH(C46,A28:A37,0)),"\#,##0") & "원 입니다"
아주 복잡해 보이지요? 그런데 정작 중요한 것은 바로 이 부분입니다.
OFFSET(A27,MATCH(B46,A28:A37,0),MATCH(C46,A28:A37,0))
Match 함수를 중첩 사용하여 행 방향과 열 방향으로 구간의 위치값을 먼저 파악한 다음, 이것을 Offset 함수의 인수로 전달해 준 것입니다. Offset 함수를 사용하지 않고 Index와 Match 함수를 중첩해서 사용해도 마찬가지 결과를 얻을 수 있습니다. 이 방법에 대해서는 X0199 강좌를 참고하시기 바랍니다.
이상에서 설명드린 것 이외에도 몇 가지 트릭이 더 숨어 있습니다. 오브젝트(개체)에 수식을 연결해 준 부분도 있고, VB0146 강좌에서 소개해 드린 Intersect 메서드를 사용하여 특정 영역이 선택되지 않도록 한 곳도 있으니까 잘 찾아보세요. 또한 진짜로 퀵 서비스 회사를 만드는데 필요한 다른 여러 가지 구비 조건들은 여러분들이 직접 생각해 보도록 하세요. ^^
정리 — MATCH·OFFSET을 이용한 구간별 요금 조회
| 구성 요소 | 역할 |
|---|---|
| 콤보 박스 | 출발지·도착지를 선택하고 연결된 셀(B45, C45)에 위치값을 저장 |
| INDEX | 위치값을 실제 지역명 문자열로 치환(B46, C46) |
| MATCH + OFFSET | 지역명이 표에서 몇 번째 행·열인지 찾아 해당 요금 셀을 참조 |
| TEXT + & | 숫자 요금에 서식을 입혀 안내 문장으로 조합 |
자주 묻는 질문 (FAQ)
Q1. 콤보 박스에서 선택한 지역 이름을 어떻게 요금표의 행·열 위치로 바꾸나요?
MATCH 함수로 콤보 박스에서 선택된 지역명이 요금표의 몇 번째 행·열에 있는지 찾아냅니다. 이렇게 얻은 위치값을 OFFSET 함수의 인수로 전달하면 해당 교차 지점의 요금 셀을 참조할 수 있습니다.
Q2. OFFSET과 MATCH를 조합하지 않고 같은 결과를 얻을 수 있는 방법이 있나요?
네. INDEX와 MATCH 함수를 중첩해서 사용해도 동일한 결과를 얻을 수 있습니다. OFFSET 대신 INDEX를 쓰면 참조하는 범위가 실제로 이동하지 않아 더 안정적인 경우도 있습니다.
Q3. 찾은 요금을 읽기 쉬운 문장으로 표시할 수 있나요?
TEXT 함수로 요금 숫자에 서식(예: #,##0)을 적용한 뒤, 문자열 연결(&) 연산자로 출발지·도착지 텍스트와 이어 붙이면 "OO에서 OO까지 요금은 OOO원 입니다"와 같은 문장을 만들 수 있습니다.
마치며
콤보 박스와 MATCH, OFFSET, TEXT 함수를 조합하면 정적인 요금표도 사용자가 직접 조회하는 대화형 도구로 바꿀 수 있습니다. 다음 시간에는 이 예제를 VBA로 확장하는 방법을 살펴보겠습니다.