본문 바로가기

엑셀/VBA

엑셀 VBA ListBox 컨트롤 사용하기

반응형

이전 글에서 목록을 만드는 데 사용하는 콤보 상자(ComboBox) 컨트롤에 대해 알아보았습니다. 이번에는 목록 상자(ListBox) 컨트롤에 대해 알아보겠습니다.

 

엑셀 VBA 목록 만들기 - ComboBox

 

엑셀 VBA 목록 만들기 - ComboBox

이전 글에서 옵션을 선택할 때 사용하는 확인란(CheckBox) 컨트롤과 옵션 단추(OptionButton) 컨트롤에 대해 알아보았습니다. 이번에는 목록을 만들어 원하는 목록을 선택하거나 값을 입력하여 목록을

mr-johndoe.tistory.com

 

 

 

 

1. 목록 상자(ListBox) 컨트롤

  목록 상자(ListBox) 컨트롤은 선택한 목록 하나만을 보여주는 콤보 상자(ComboBox) 컨트롤과는 달리 목록 전체를 한 번에 보여줍니다.

 

도구상자-ListBox
[그림 1] 도구 상자 - 목록 상자(ListBox)

[그림 1]은 사용자 정의 폼의 도구 상자를 보여주며 빨간색 사각형으로 표시된 아이콘이 목록 상자(ListBox) 컨트롤을 생성하는 아이콘입니다. 이 아이콘을 클릭하고 마우스를 사용자 정의 폼내에서 원하는 위치에 클릭한 후 드래그하여 원하는 크기로 만든 후 마우스 왼쪽 버튼에서 손을 놓으면 목록 상자가 만들어집니다.

 

2. 예제로 확인

  [그림 2]의 영업실적 시트를 예제로 목록 상자(ListBox)에 대해 확인해 보겠습니다.

 

영업실적 - 예제
[그림 2] 영업실적 시트

이 영업실적 시트에 ActiveX 버튼을 하나 생성하고 속성창 Caption에 '조회'라고 입력합니다.

 

 

 

 

그리고, VBE 창을 열고 사용자 정의 폼(UserForm)을 생성합니다.

 

UserForm-영업실적
[그림 3] 사용자 정의 폼 - 영업실적

 

[그림 3]과 같이 목록 상자 1개, 버튼 2개를 생성합니다.

사용자 정의 폼의 속성창에서 Caption에 '영업실적'이라고 입력하고, 좌측 버튼의 Caption에는 '확인'을, 우측 버튼의 Caption에는 '취소'를 입력합니다.

 

사용자 정의 폼을 마우스 왼쪽 버튼으로 더블클릭을 하시면 코드 창이 화면에 뜹니다. 코드 창이 뜨면 코드에는 Click에 대한 Sub 프로시저가 자동으로 생성되는데 왼쪽 위쪽에 Click이라고 되어 있는 부분의 화살표를 클릭하시고 Initialize를 선택하시면 Initialize의 Sub 프로시저가 생성됩니다. 그리고, Click의 Sub 프로시저 부분은 삭제하셔도 됩니다.

 

그 코드 창에 다음과 같이 코드를 작성합니다. 

 

   Private Sub UserForm_Initialize()

      ListBox1.RowSource = Range("B5", Range("B5").End(xlDown).End(xlToRight)).Address

      ListBox1.ColumnCount = 4

      ListBox1.ColumnHeads = True

      ListBox1.ColumnWidths = "50;40;60;60"

   End Sub

 

Range("B5").End(xlDown).End(xlToRight)

: B5 셀에서부터 아래로 데이터가 입력된 셀 마지막까지 이동하고 다시 오른쪽으로 데이터가 입력된 셀 마지막까지 이동하였을때 셀 주소를 반환합니다.

 

ListBox1.RowSource = Range("B5", Range("B5").End(xlDown).End(xlToRight)).Address

: ListBox1에 엑셀 시트의 B5 셀부터 데이터가 입력되어 있는 마지막 셀까지의 값을 입력하여 목록 상자에 표시해줍니다. 

 

ListBox1.ColumnCount = 4

: 목록 상자의 열을 4개로 만들어 줍니다. 기본은 1개로 되어 있어서 이 코드가 없으면 영업실적 시트 내용 중에서 가장 첫 번째 열의 내용인 '성명'만 나타나게 됩니다.

 

ListBox1.ColumnHeads = True

: 목록 상자 제일 윗줄에 제목이 표시됩니다.

 

ListBox1.ColumnWidths = "50;40;60;60"

: 목록 상자 각 열의 폭을 입력합니다.

 

참고로 이 코드를 작성할 때 ListBox1이 반복되어 사용되는데 이를 With를 사용하면 반복 입력하지 않아도 됩니다. With를 써서 다음과 같이 작성할 수도 있습니다.

 

   Private Sub UserForm_Initialize()

      With ListBox1

        .RowSource = Range("B5", Range("B5").End(xlDown).End(xlToRight)).Address

        .ColumnCount = 4

        .ColumnHeads = True

        .ColumnWidths = "50;40;60;60"

      End With

   End Sub

 

 

 

 

사용자 정의 폼에서 확인 버튼을 마우스로 더블클릭하고 다음과 같이 코드를 작성합니다.

 

   Private Sub CommandButton1_Click()

      MsgBox ("성명 : " & ListBox1.Column(0) & " " & "상반기 : " & ListBox1.Column(2) & " " & "하반기 : " & ListBox1.Column(3))

   End Sub

 

확인 버튼을 클릭하면 목록 상자에서 선택한 데이터가 메시지 창으로 나타나게 됩니다.

 

사용자 정의 폼에서 취소 버튼을 마우스로 더블 클릭하시고 다음과 같이 코드를 작성합니다.

 

   Private Sub CommandButton2_Click()

      Unload Me

   End Sub

 

Unload Me

: 이 코드는 'Unload UserForm1'과 동일한 내용으로 취소 버튼이 생성되어 있는 창이 UserForm1 사용자 정의 폼이므로 간단히 'Me'를 사용할 수 있습니다.

 

이제 시트에 생성한 조회 버튼을 클릭하면 작성한 사용자 정의 폼이 나타나는 것을 확인하실 수 있습니다.

반응형