• 최초 작성일: 2000-07-21
  • 최종 수정일: 2026-09-30
  • 조회수: 18 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 내용이 변하는 ListBox 만들기

들어가기 전에

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

내용이 변하는 리스트 박스라고 하고 보니까 좀 이상하군요. 내용을 제대로 설명하지 못한 것도 같고… 하지만 내용을 조금만 읽어 내려가면 무엇을 만들어 보려 하는지 금방 이해하실 것입니다.

지금까지 여러 차례 유저폼에 대해, 그리고 유저폼에서 사용되는 여러 가지 컨트롤 오브젝트들에 대해 설명을 드렸습니다.

이번 강좌에서 설명드릴 내용은 유저폼 내에 몇 개의 옵션 버튼을 만들어 두고 이 옵션 버튼들 중에서 어느 것을 누르느냐에 따라 서로 다른 리스트들이 나타나도록 하는 것입니다. 우선 아래의 버튼을 눌러서 실행시켜 보고 오시기 바랍니다.

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

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

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


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

내용이 변하는 ListBox 만들기

핵심 요약: RowSource를 바꾸는 리스트박스

RowSource 속성에 범위 또는 범위명을 지정하면 옵션버튼에 따라 리스트박스의 목록을 바꿀 수 있습니다.

  • 1단계: 시트에 목록을 입력하고 범위명을 지정합니다.
  • 2단계: 옵션버튼 클릭 이벤트에서 RowSource를 범위명으로 지정합니다.
  • 3단계: OK 버튼에서 Selected로 선택 항목을 모읍니다.

Step 1: 유저폼 만들기

이제 직접 만들어 보도록 하지요.

(1) VB Editor 상태에서(Alt+<F11>) UserForm을 하나 삽입한 다음, 아래와 같이 컨트롤들을 만듭니다.

옵션버튼 3개와 리스트박스, OK/Close 버튼이 있는 유저폼
아이엑셀러

이 유저폼에는 어떤어떤 컨트롤들이 사용되었는지 아시겠지요? 그렇습니다. 3종류, 7개의 컨트롤이 사용되었습니다. 일단 컨트롤들을 삽입한 다음, 각각의 속성을 다음과 같이 바꾸어 줍니다.

① ListBox 컨트롤

컨트롤명변경할 속성변경 내용
ListBox1MultiSelect2 - fmMultiSelectExtend (크기는 적당히 조절)

② OptionButton 컨트롤

컨트롤명변경할 속성변경 내용
OptionButton1Caption화장품
NameoptCosmetic
OptionButton2Caption컴퓨터
NameoptComputer
OptionButton3Caption자동차
NameoptCar

③ Frame 컨트롤

컨트롤명변경할 속성변경 내용
Frame1Caption품목 선택

④ CommandButton

컨트롤명변경할 속성변경 내용
CommandButton1AcceleratorO
CaptionOK
NamebtnOK
CommandButton2AcceleratorC
CaptionClose
NamebtnClose

이렇게 해서 컨트롤을 만드는 일은 끝났고… 각 컨트롤에 코드를 연결하도록 합니다. 코딩에 앞서서, 옵션버튼에서 사용할 자료들을 미리 입력해 두어야 겠지요(Sheet2에 미리 입력을 해 두었습니다. 친철하기도 한 지고… ^^).

Sheet2에는 A2:A19(범위명 "화장품"), B2:B16(범위명 "컴퓨터"), C2:C22(범위명 "자동차")에 품목 목록이 입력되어 있습니다.

Step 2: 코드 작성하기

(1) 옵션버튼 클릭 이벤트

(2) 먼저, 옵션 버튼 중에서 "화장품"을 더블클릭하면 optCosmetic_Click 이벤트가 나타나는데 아래의 코드를 입력합니다.

Private Sub optCosmetic_Click()
    ListBox1.RowSource = "화장품"
    '//한 줄 밖에 안되는 군요. 더구나 RowSource는 이미 설명드린 내용이지요? RowSource 속성은 리스
    '//트 박스나 콤보 박스에서 사용되는 목록의 원본을 지정하는 것입니다.
End Sub

(3) 유저폼으로 돌아간 다음(Shift + <F7>), "컴퓨터" 버튼을 더블클릭하고 optComputer_Click 이벤트 코드를 작성합니다.

Private Sub optComputer_Click()
    ListBox1.RowSource = "컴퓨터"
End Sub

(4) Shift + <F7>을 눌러 UserForm을 호출하고, 이번에는 "자동차"를 더블클릭하고 코드를 입력합니다.

Private Sub optCar_Click()
    ListBox1.RowSource = "자동차"
End Sub

(2) OK 버튼

(5) 유저폼으로 돌아간 다음, "OK" 버튼을 더블클릭 합니다. btnOK_Click 이벤트 코드를 작성합니다. 이 코드는 몇 강좌 전에 설명드렸습니다. 기억이 나실지 모르겠지만… 복수 아이템을 선택하는 방법에 대한 강좌에서 소개해 드렸지요.

Private Sub btnOK_Click()
    Dim i As Integer
    Dim Msg As String

    If ListBox1.ListIndex < 0 Then
        MsgBox "아무 것도 선택하지 않으셨군요!", , "//Exceller"
        Exit Sub
        '//ListIndex가 0보다 작다는 것은 아무 목록도 선택하지 않았다는 것이므로 에러 메시지를 뿌려주고
        '//프로시저를 빠져 나갑니다.
    End If

    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then _
            Msg = Msg & vbCr & ListBox1.List(i)
        '//For~Next 순환문을 돌면서 선택된 리스트들을 Msg라는 변수에 담아둡니다. 이번 강좌에서 사용
        '//된 리스트 박스도 MultiSelect 속성을 2(즉 fmMultiSelectExtend)로 지정을 해 주었기 때문에 Ctrl
        '//키나 Shift 키를 사용해서 복수 개의 리스트 아이템을 선택해 줄 수도 있습니다.

    Next i

    MsgBox Msg & vbCr & "를(을) 선택하셨습니다!", , "//Exceller"
End Sub

(3) Close 버튼

(6) 유저폼으로 돌아간 다음, "Close" 버튼을 더블클릭 하고 btnClose_Click 이벤트 코드를 작성합니다.

Private Sub btnClose_Click()
    Unload Me
End Sub

(4) 유저폼 호출

Sub ShowMetheForm()
    UserForm1.Show
End Sub

마무리

오늘 설명드린 내용에는 새로운 컨트롤이나 속성은 거의 사용된 것이 없습니다. 단지, 여러 개의 옵션 버튼 에 각기 다른 범위를 지정해서 버튼을 누를 때마다 서로 다른 값이 리스트 박스에 디스플레이 되도록 하는 방법이 조금 다를 뿐이지요. 다음 시간에는 또다른 재미있는 것을 해 보도록 하겠습니다.

그럼…

정리 — 리스트박스 목록 전환 핵심

구분 사용한 코드 역할
목록 전환 ListBox1.RowSource = "화장품" 범위명으로 원본 지정
선택 확인 ListBox1.ListIndex < 0 미선택 검사
복수 선택 ListBox1.Selected(i) 선택 여부 확인
항목 읽기 ListBox1.List(i) 항목 값
폼 닫기 Unload Me 종료

자주 묻는 질문 (FAQ)

Q1. RowSource에는 무엇을 지정할 수 있나요?

"A1:A10" 같은 범위 주소나 범위명을 지정할 수 있습니다.

Q2. 복수 항목을 선택하려면 어떻게 하나요?

MultiSelect 속성을 2(fmMultiSelectExtend)로 지정하면 Ctrl, Shift 키로 여러 항목을 선택할 수 있습니다.

Q3. 아무 항목도 선택하지 않았는지는 어떻게 확인하나요?

ListIndex가 0보다 작으면 선택된 항목이 없는 것입니다.

마치며

새로운 컨트롤은 없지만, 옵션버튼마다 다른 범위를 지정하는 방법만 익혀 두면 다양하게 응용할 수 있습니다.