• 최초 작성일: 2002-03-12
  • 최종 수정일: 2026-09-29
  • 조회수: 21 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 구간별 요금표 만들기2

들어가기 전에

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

지난 시간에 만든 퀵 서비스 회사는 잘 운영이 되고 있나요? ^^

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

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

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


26년 경력 Microsoft MVP 권현욱(엑셀러) 지음

📊 신간 전자책(PDF) · 287쪽 · 13500원

엑셀 대시보드를 만드는 최적의 '표준 3계층 구조'

  • 3초 안에 읽히는 화면 설계 감각 습득
  • Microsoft Excel MVP의 실전 노하우 수록
  • 중간마진 없는 합리적인 가격, 오직 아이엑셀러에서만!
지금 구매하기 완성 화면 보기

구간별 요금표 만들기2

핵심 요약

  • 콤보 박스에서 출발지와 도착지를 선택하면 Find 메서드로 해당 행·열을 찾아 요금 셀을 선택할 수 있습니다.
  • 선택된 요금 셀에는 글꼴·배경색을 적용하고 메모를 표시해 사용자가 결과를 쉽게 확인하도록 만들 수 있습니다.
  • 별도 ResetFormats 프로시저로 이전 강조 서식과 메모를 지워 다음 검색을 위한 화면을 초기화합니다.

강좌가 나가고 난 후 Exceller 옆에 앉아 있는 후배 직원이 이런 질문을 해 왔습니다.

황모군: 근데요… 콤보 박스로 지역을 선택하면 구간별 요금뿐 아니라 해당 셀까지 선택이 되도록 할 수 있나요?

Exceller: 어, 그래? 거 참 좋은 생각이군! 한번 만들어 봐! 오늘 중으로… 황모군: (눈만 꿈뻑 꿈뻑하며)… 다신 질문 하나봐라! (← 거의 이런 말이 나오기 직전이었음) 말은 이렇게 했지만… Exceller는 누구한테 숙제 내놓고 자기는 안하는 그런 타입은 아니지요! ^^

아래의 콤보 박스를 클릭해서 검색하고자 하는 지역을 선택해 보세요. 불가능은 없습니다. 방법을 (자기가) 모르고 있을 따름입니다. 하고자 하는 의지만 있다면 어떻게든지 방법을 찾아내는 것이 또한 인간이지요!

FromTo
36
63
=INDEX(A31:A40,B24)=INDEX(B30:K30,0,C24)

㈜달려라 막달려라 구간별 배송 요금표

지역강남강동용산강서관악영등포구로금천노원도봉
강남5000100001400016000100001000012000130001400015000
강동100005000140001900015000800016000170001500016000
용산140001400050001700014000110001100015000160008000
강서1600019000170005000130001800011000120001800017000
관악10000150001400013000500013000800090001600016000
영등포100008000110001800013000500016000160001100011000
구로12000160001100011000800016000500070001700018000
금천13000170001500012000900016000700050001800018000
노원140001500016000180001600011000170001800050007000
도봉15000160008000170001600011000180001800070005000

사실 이것은 VBA 강좌 시간에 설명을 드려야 할 것이나 예제 데이터가 지난 번 EXCEL 강좌의 연장선 상에 있는 것이므로 그냥 여기서 설명드리도록 합니다. 위 두 개의 콤보 박스에는 이런 코드가 매달려 있습니다.

구간별 요금표 만들기2 예제 화면 1
아이엑셀러
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 코드를 더하면, 선택한 구간의 요금 셀까지 자동으로 찾아 강조해 주는 한층 더 친절한 도구가 됩니다. 다음 시간에…