Please Enable JavaScript!
Gon[ Enable JavaScript ]

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

엑셀(Excel)/VBA
반응형

오늘은 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 리스트 멀티 선택해서 추가 삭제하는 방법

 ※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 Excel VBA 개발에 도움이 되는 편집기창 이용 방법들
엑셀 VBA 매크로 실행 버튼으로 코드 실행하기
엑셀 Excel 매크로 실행과 소스 편집하기
엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기
셀 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 리스트 멀티 선택해서 추가 삭제하는 방법

 ※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 Excel VBA 개발에 도움이 되는 편집기창 이용 방법들
엑셀 VBA 매크로 실행 버튼으로 코드 실행하기
엑셀 Excel 매크로 실행과 소스 편집하기
엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기
셀 VBA 카메라 기능을 매크로로 작성하기
반응형
Posted by 녹두장군

댓글을 달아 주세요