엑셀 VBA 리스트 멀티 선택해서 추가 삭제하는 방법

엑셀(Excel)/VBA

엑셀 VBA 리스트 멀티 선택해서 추가 삭제하는 방법

 

환경: Microsoft Excel 2013

 

오늘은 VBA 폼을 잘 다루기 위한 연습 문제입니다. 구현할 예제는 왼쪽 목록 박스에 들어가 있는 데이터 중 하나 혹은 여러 개를 선택해서 바로 옆에 있는 목록 박스로 옮기는 예제 입니다. 데이터를 여러 개 추가해서 관리할 수 있는 목록 박스는 옵션에 따라 단일과 멀티 선택이 가능합니다. 샘플 예제는 3가지 옵션에 따라 어떤 식으로 선택해서 전송을 하는지 알려 줍니다.



먼저 폼을 추가합니다. 왼쪽에서 오른쪽으로 자료를 보낼 버튼과 목록 상자 두 개를 생성합니다. 그리고 아래에는 목록 상자에 데이터가 단일 혹은 멀티 선택이 될 수 있도록 설정하는 옵션을 위치시킵니다

엑셀 VBA 리스트 멀티 선택해서 추가 삭제하는 방법


폼이 뜨면 실행되는 초기화 함수부터 구현합니다. 왼쪽 콤보박스에서 UserForm 과 오른쪽 콤보박스에서 Initialize 를 선택합니다. 그럼 초기화 함수 UserForm_Initialize() 함수가 자동으로 생성됩니다. 함수에는 왼쪽 목록 상자에 데이터를 채우는 기능이 있습니다.

 

Private Sub UserForm_Initialize()

   

    With ListBox1

         .AddItem "사과"

         .AddItem "포도"

         .AddItem "망고"

         .AddItem "토마토"

         .AddItem "블루베리"

    End With

   

    OptionButton1.Value = True

   

End Sub

엑셀 VBA 리스트 멀티 선택해서 추가 삭제하는 방법

 


두 개의 목록 버튼 사이에 있는 추가 버튼은 왼쪽에서 오른쪽으로 데이터를 복사하는 기능을 합니다. 왼쪽 목록에서 Selected 함수로 선택되었는지 여부를 판단한 뒤 오른쪽 목록에 AddItem 함수를 이용해서 데이터를 추가합니다.

 

Private Sub CommandButton1_Click()

    For i = 0 To ListBox1.ListCount - 1

        If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)

    Next i

End Sub

엑셀 VBA 리스트 멀티 선택해서 추가 삭제하는 방법

 

두 번째 버튼인 삭제는 오른쪽 목록에 있는 데이터를 삭제하는 기능을 합니다. 아래 옵션 선택 여부에 따라서 단일/멀티로 선택된 데이터만 삭제를 합니다.

 

Private Sub CommandButton2_Click()

    Dim counter As Integer

    counter = 0

 

    For i = 0 To ListBox2.ListCount - 1

         If ListBox2.Selected(i - counter) Then

             ListBox2.RemoveItem (i - counter)

             counter = counter + 1

         End If

    Next i

 

    'CheckBox2.Value = False

 

End Sub

엑셀 VBA 리스트 멀티 선택해서 추가 삭제하는 방법

 

마지막으로 Type 에 있는 3가지 옵션의 클릭 이벤트 함수를 구현합니다. 목록 상자에 단일/멀티 속성 여부는 MultiSelect 의 값에 따라 결정됩니다. 순서에 따라 단일 선택은 1, 클릭으로 멀티 선택할 수 있는 옵션은 2, Ctrl 키를 이용해서 멀티 선택할 수 있는 방식은 3으로 세팅해 줘야 합니다. 어떻게 구현되었는지 보시고 싶다면 아래 동영상을 참고하시기 바랍니다.

 

Private Sub OptionButton1_Click()

    ListBox1.MultiSelect = 0

    ListBox2.MultiSelect = 0

End Sub

 

Private Sub OptionButton2_Click()

    ListBox1.MultiSelect = 1

    ListBox2.MultiSelect = 1

End Sub

 

Private Sub OptionButton3_Click()

    ListBox1.MultiSelect = 2

    ListBox2.MultiSelect = 2

End Sub

엑셀 VBA 리스트 멀티 선택해서 추가 삭제하는 방법

Posted by 녹두장군