VBA 목록상자 – 선택한 항목

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 4월 15, 2023

이 튜토리얼에서는 Excel VBA의 목록 상자에서 선택한 항목으로 작업하는 방법을 설명합니다.

목록 상자는 사용자에게 옵션 목록을 표시하여 하나 이상의 항목을 선택할 수 있도록 합니다. 주로 VBA 사용자 정의 폼에서 사용되지만 Excel 워크시트 내에서도 사용할 수 있습니다.

VBA 사용자 정의 폼에서 목록 상자 만들기

VBA 사용자 정의 폼에서 목록 상자를 만들려면 먼저 UserForm을 만들어야 합니다.

양식을 만든 후 도구 상자에서 목록 상자를 선택한 다음 드래그하여 사용자 정의 폼에 목록 상자를 만듭니다.

목록 상자에 값 추가하기

사용자 정의 폼의 Initialize 이벤트에 다음 코드를 입력합니다. 목록 상자는 Excel 워크시트의 셀 범위에 저장된 값을 선택합니다.

Private Sub UserForm_Initialize()
  Dim rng As Range
  For Each rng In Range("A1:A50")
    Me.lstState.AddItem rng.Value
  Next rng
End Sub

When we run the form, the list box will be shown as demonstrated in the image below:

목록 상자에서 값 선택하기

기본적으로 사용자 양식의 목록 상자에서는 단일 값을 선택할 수 있습니다. 그러나 목록 상자의 Multi-Select 속성을 변경하면 이를 수정할 수 있습니다.

목록 상자를 클릭하여 선택한 다음 속성 창에서 다중 선택 속성을 0-frmMultiSelectSingle에서 1-frmMultiSelectMulti로 변경합니다.Click on the list box to select it, and then in the Properties window, change the Multi-Select Property from 0-frmMultiSelectSingle to 1-frmMultiSelectMulti.

 

이제 사용자 정의 폼을 실행하면 목록 상자에서 둘 이상의 옵션을 선택할 수 있습니다.

옵션을 2-frmMultiSelectExtended로 변경하면 값 하나를 선택고 Shift 키를 누른 상태에서 목록 아래쪽에서 다른 값을 선택하면 선택한 두 값 사이의 모든 항목이 선택됩니다.

VBA에서 선택한 값으로 작업하기

목록 상자의 Multi-Select 속성에 사용한 옵션 유형에 따라 목록 상자에서 선택한 값을 VBA 코드에서 사용할 수 있는 방법은 여러 가지가 있습니다.

변수에 값 할당하기

목록 상자의 After_Update 이벤트를 사용하여 선택한 값을 변수에 할당할 수 있습니다.

먼저 폼 모듈의 상단에 모듈 수준 변수를 만들어 보겠습니다.

Option Explicit 아래에 다음과 같은 문자열 변수를 만듭니다.

Dim strState as String

목록 상자를 두 번 클릭하거나 VBE 편집기에서 코드 보기 버튼을 클릭하여 사용자 정의 양식 내에 있는 코드로 이동할 수 있습니다 .

목록 상자의 클릭 이벤트가 자동으로 생성됩니다. 사용 가능한 프로시저 목록에서 After_Update 이벤트를 선택합니다.

 

After_Update 이벤트에 다음 코드를 입력합니다:

Private Sub lstState_AfterUpdate()
  strState = Me.lstState
End Sub

참고: Click 이벤트는 필수가 아니므로 삭제해도 됩니다.

이제 폼을 실행하고 목록 상자를 클릭하면 선택한 값이 변수에 저장됩니다. 이를 테스트하기 위해 코드에 중단지점을 넣을 수 있습니다.

VBAListBox BreakPoint

이제 폼을 실행하고 목록 상자를 클릭하면 코드가 디버그 모드로 전환되고 중단점에서 멈춥니다. 그런 다음 키보드의 F8 키를 눌러 코드에서 한 단계 더 이동하면 목록에서 선택한 항목으로 변수가 채워집니다.

변수 위에 마우스를 올려놓으면 이 값을 볼 수 있습니다.

 

또는

직접실행 창에서 값을 볼 수 있습니다.We can view the value in the Immediate Window.

명령 단추를 사용하여 값을 Excel로 반환하기

먼저 목록 상자에서 선택한 값을 Excel로 반환하는 버튼을 만들기 위해 양식에 명령 단추를 만듭니다.

명령 단추를 선택한 다음 양식을 클릭하고 드래그하여 버튼을 만듭니다

속성 창에서 버튼의 이름을 cmdOK로 변경하고 버튼의 Caption과 Accelerator를 변경합니다.

Accelerator 의 목적은 사용자가 키보드를 사용하여 버튼을 활성화하는 것입니다. 이 경우 Alt+O를 누르면 버튼이 활성화됩니다.

VBAControls Button Accelerator

명령 버튼이 작동하려면 버튼이 클릭될 때 코드가 실행되도록 코드를 추가해야 합니다. 이를 버튼의 Click 이벤트라고 합니다.

클릭 이벤트로 이동하려면 폼의 디자인 보기에서 버튼을 두 번 클릭합니다. 클릭 이벤트는 명령 버튼에 가장 일반적으로 사용되는 이벤트이므로 자동으로 생성됩니다.

명령 버튼의 Click 이벤트에 다음 코드를 입력합니다.

Private Sub cmdOK_Click()
  Range("E1") = strState
End Sub

이 코드는 목록상자의 After_Update 이벤트에서 선언한 변수를 가져와 Excel의 범위에 값을 반환합니다.

변수를 사용하지 않고 목록 상자에서 직접 값을 가져올 수도 있습니다.

Private Sub cmdOK_Click()
  Range("E1") = me.lstState
End Sub

양식을 실행하고 OK 버튼을 클릭하면 선택한 값이 Excel로 반환됩니다.

다중 값 선택하기

목록 상자의 MultiSelect 속성을 1 또는 2로 설정하여 목록에서 여러 값을 선택할 수 있는 경우 이러한 값을 선택하는 코드가 약간 달라집니다.

다중 값 선택 옵션을 사용할 경우 목록 상자에서 값을 선택할 때 After_Update 이벤트가 더 이상 발생하지 않으므로 이 이벤트를 사용할 수 없습니다.

명령 버튼 클릭 이벤트는 계속 사용할 수 있지만 목록 상자에서 선택한 값을 Excel로 반환하려면 값을 반복해야 합니다.

명령 버튼 Click 이벤트에 다음 코드를 입력합니다.

Private Sub cmdOK_Click()
  Dim x As Integer
  Range("E1").Select
  For x = 0 To Me.lstState.ListCount - 1
     If Me.lstState.Selected(x) = True Then
        ActiveCell = Me.lstState.List(x)
        ActiveCell.Offset(1, 0).Select
     End If
  Next x
End Sub

이제 폼을 실행하고 OK 버튼을 클릭하면 선택된 값만 Excel 시트에 반환됩니다.

 

vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기