• 최초 작성일: 2000-09-01
  • 최종 수정일: 2026-09-30
  • 조회수: 22 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: Multi-column ListBox 다루기

들어가기 전에

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

지금까지 강좌를 진행해 오면서 여러 가지 방법으로 ListBox를 사용하는 것에 대해 설명을 드렸습니다. 일반적인 ListBox는 한 개의 컬럼만으로 이루어진 것이었지만 두 개 또는 그 이상의 Column을 리스트 박스 내에서 보여지게 할 수도 있습니다.

그러면 직접 만들어 보도록 하지요.

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

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

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


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

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

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

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

Multi-column ListBox 다루기

핵심 요약: 여러 열의 리스트박스

ColumnCount와 ColumnWidths, RowSource를 지정하면 리스트박스에 여러 열을 표시할 수 있습니다.

  • 1단계: ColumnHeads를 True로 하고 ColumnCount로 열 수를 지정합니다.
  • 2단계: RowSource에 데이터 범위를 지정하고 ColumnWidths로 열 너비를 정합니다.
  • 3단계: ListIndex가 0 미만이면 미선택으로 처리합니다.

Step 1: 유저폼 만들기

(1) VB Editor를 연 다음 유저폼을 하나 삽입하고 아래와 같이 컨트롤들을 그려 넣습니다. 여기서 사용된 컨트롤은 1개의 리스트박스와 2개의 커맨드 버튼입니다.

리스트박스 1개와 선택, 닫기 버튼이 있는 유저폼
아이엑셀러

Step 2: 예제 데이터

Sheet2의 A1:D18 범위에 브랜드명, 상품명, 수량, 판매금액이 입력되어 있으며, 첫 행은 제목입니다. 다음은 앞부분의 일부입니다.

브랜드명상품명수량판매금액
아이오페건성스킨1002000000
아이오페건성로션1232460000
아이오페크림901800000
라네즈스킨3006000000
라네즈로션2505000000
라네즈아스트린2004000000

Step 3: 코드 작성하기

(1) 초기화 이벤트

(2) 먼저 유저폼의 초기화 이벤트(UserForm_Initialize)를 만듭니다. 유저폼을 띄운 상태에서 컨트롤이 없는 빈 영역을 더블클릭하면 UserForm_Click 이벤트가 발생할 것입니다. 여기서 화면 우측 상단의 이벤트 선택 버튼을 클릭한 다음 Initialize 이벤트를 선택하고 아래의 코드를 입력합니다. 노란색 부분이 오늘 강좌의 핵심입니다.

Private Sub UserForm_Initialize()
    With ListBox1
        .ColumnHeads = True
        .ColumnCount = 4
        .RowSource = "Sheet2!A2:D18"
        .ColumnWidths = "70pt;70pt;49pt;95pt"
        '//즉 유저폼의 초기화 이벤트에서 리스트 박스의 헤드부분, 컬럼수, RowSource 영역, 각 컬럼
        '//들의 폭을 설정해 줍니다.

        '//초기화 이벤트에서 설정해 주는 대신 속성창에서 해당 프로퍼티를 직접 조절해 주어도 됩니다.
    End With
End Sub

(2) 선택 버튼

(3) Shift + <F7>키를 눌러 유저폼으로 돌아간 다음 "선택" 버튼을 더블클릭 한 다음 여기에 해당하는 코드 를 다음과 같이 작성합니다. 그런데 "커맨드 버튼을 더블클릭 했는데 왜 그냥 클릭 이벤트가 생기지?" 하는 의문이 생기지 않습니까? 그것은 첫번째 클릭한 것은 해당 컨트롤을 그냥 선택하기 위한 것이기 때문입니다.

Private Sub btnSelect_Click()
    Dim intNum As Integer
    Dim Msg As String

    With ListBox1
        If .ListIndex < 0 Then
            MsgBox "선택이 잘못되었습니다", vbInformation, "Exceller"
            Exit Sub
        End If
        '//리스트 박스에서 유효하지 않은 항목(즉 아무 항목도 선택하지 않았을 경우)을 선택했을 경우
        '//에러 메시지를 보여주고 프로시저를 빠져 나갑니다.

        intNum = .ListIndex + 1
        Msg = .List(.ListIndex) & "를(을) 선택하였습니다"
        MsgBox Msg, , "Exceller"
        '//유효한 항목을 선택하게 되면 해당 항목의 값을 메시지 박스를 통해 보여줍니다.

    End With
End Sub

(3) 닫기 버튼

(4) "닫기" 버튼에 대한 프로시저를 작성합니다.

Private Sub btnClose_Click()
    Unload Me
End Sub

(4) 유저폼 호출

Sub ShowMultiColumnForm()
    UserForm1.Show
End Sub

마무리

오늘 설명드린 내용 중에서 UserForm_Initialize 이벤트에서 사용한 몇 가지 프로퍼티(속성)을 제외하고는 지난 강좌를 잘 이해하신 분이라면 쉽게 만드실 수 있으리라 생각됩니다. 또한 여러 가지 이벤트에 대해 설명하기 위해 초기화 이벤트에 ColumnHeads, ColumnCount 등의 속성을 사용했지만 굳이 이벤트 프로시저를 사용하지 않더라도 "속성창"에서 직접 지정을 해 주어도 됩니다.

오늘은 여기까지…

정리 — 멀티 컬럼 리스트박스 핵심

구분 사용한 코드 역할
머리글 .ColumnHeads = True 열 제목 표시
열 수 .ColumnCount = 4 표시할 열 개수
원본 범위 .RowSource = "Sheet2!A2:D18" 데이터 범위
열 너비 .ColumnWidths = "70pt;70pt;49pt;95pt" 열별 너비
선택 확인 .List(.ListIndex) 선택 항목 값

자주 묻는 질문 (FAQ)

Q1. ColumnHeads를 사용하려면 RowSource를 어떻게 지정해야 하나요?

열 제목이 있는 행 바로 아래부터 RowSource를 지정하면, 제목 행이 머리글로 표시됩니다.

Q2. 속성 지정은 꼭 코드로 해야 하나요?

아니요. 굳이 이벤트 프로시저를 쓰지 않아도 속성창에서 직접 지정해도 됩니다.

Q3. 열 너비는 어떻게 지정하나요?

ColumnWidths에 열마다 너비를 세미콜론으로 구분해 "70pt;70pt;49pt;95pt"처럼 지정합니다.

마치며

속성창에서 직접 지정해도 되지만, 이벤트에서 지정하는 방법도 익혀 두시기 바랍니다.