본문 바로가기

엑셀/VBA

엑셀 VBA 목록 만들기 - ComboBox

반응형

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

 

 

 

 

 

엑셀 VBA 옵션 선택 컨트롤 - CheckBox, OptionButton

 

엑셀 VBA 옵션 선택 컨트롤 - CheckBox, OptionButton

이전 글에서 텍스트 상자(TextBox)에 대해 알아보았습니다. 이번에는 열거된 선택사항들 중에서 선택을 할 때 사용하는 확인란(CheckBox)과 옵션 단추(OptionButton)에 대해 알아보겠습니다. 엑셀 VBA 텍

mr-johndoe.tistory.com

 

1. 콤보 상자(ComboBox)

  콤보 상자(ComboBox) 컨트롤은 데이터를 입력할 때 정해진 항목들이 있어서 그 항목들을 목록으로 만들어 사용자에게 보이고 원하는 항목을 선택할 수 있도록 제공해 줍니다. 가령 직원 연락망을 작성하면서 부서를 입력할 때 회사의 부서를 목록화하여 콤보 상자를 통해 부서 목록을 제공하여 사용자가 선택할 수 있도록 할 때 사용합니다. 이렇게 함으로 부서명을 통일하여 사용할 수 있게 되며, 부서명을 잘못 입력함으로 발생하는 오류를 방지하게 됩니다.

 

도구상자-ComboBox
[그림 1] 콤보 상자

[그림 1]은 사용자 정의 폼의 도구 상자를 보여드리고 있으며 빨간색 사각형으로 표시한 아이콘이 콤보 상자(ComboBox) 컨트롤을 생성하는 아이콘입니다.

 

 

 

 

2. 예제로 확인

  엑셀 시트를 2개 작성하여 시트 이름을 '직원'과 '부서명'이라고 입력합니다.

그리고, 부서명 시트에는 [그림 2]와 같이 부서명을 입력하여 놓습니다. 

 

부서목록
[그림 2] 부서명 시트 - 부서 목록

VBE 창을 열고 사용자 정의 폼을 하나 생성한 다음 [그림 3]과 같이 텍스트 상자 1개, 콤보 상자 1개, 버튼 2개를 생성하여 구성합니다.

 

UserForm-직원
[그림 3] 사용자 정의 폼 - 직원입력

 

사용자 정의 폼 위에 마우스 커서를 이동시키고 마우스 오른쪽 버튼을 클릭한 후 출력된 메뉴에서 코드 보기를 클릭하여 코드 창을 엽니다. 그리고, 다음과 같이 코드를 작성합니다.

 

   Private Sub UserForm_Activate()

      Dim i As Integer

 

      TextBox1.Value = ""

      ComboBox1.Clear

 

      For i = 3 To Worksheets("부서명").Range("B" & Application.Rows.Count).End(xlUp).Row

         ComboBox1.AddItem ThisWorkbook.Sheets("부서명").Range("B" & i)

      Next i

   End Sub

 

TextBox1.Value = ""

: 사용자 정의 폼의 텍스트 상자를 초기화합니다.

 

ComboBox1.Clear

: 사용자 정의 폼의 콤보 상자를 초기화합니다.

 

Worksheets("부서명").Range("B" & Application.Rows.Count).End(xlUp).Row

: 부서명 시트의 B열에서 데이터가 입력되어 있는 가장 마지막 행의 값을 찾습니다.

 

For i = 3 To Worksheets("부서명").Range("B" & Application.Rows.Count).End(xlUp).Row

   ComboBox1.AddItem ThisWorkbook.Sheets("부서명").Range("B" & i)

Next i

: For 문을 이용하여 3행부터 부서명이 입력된 마지막 행 번호까지 반복 수행하면서 콤보 상자에 부서명을 추가합니다.

 

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

 

   Private Sub CommandButton1_Click()

      Dim j As Integer

 

      j = ThisWorkbook.Sheets("직원").Range("B" & Application.Rows.Count).End(xlUp).Row + 1

      Range("B" & j).Value = TextBox1.Value

      Range("C" & j).Value = ComboBox1.Value

   End Sub

 

ThisWorkbook.Sheets("직원").Range("B" & Application.Rows.Count).End(xlUp).Row 

: 직원 시트 B열에 데이터가 입력된 마지막 행 값을 찾습니다.

 

j = ThisWorkbook.Sheets("직원").Range("B" & Application.Rows.Count).End(xlUp).Row + 1

: 데이터가 입력된 마지막 행 값에 1을 더하여 변수 j에 입력하였습니다.

 

Range("B" & j).Value = TextBox1.Value

: B열 j행 셀에 텍스트 상자 값을 입력합니다.

 

Range("C" & j).Value = ComboBox1.Value

: C열 j행 셀에 콤보 상자 값을 입력합니다.

 

반응형