[엑셀VBA] 리스트박스 안에 체크박스 만들기

안녕하십니까 한국통계정보원 성용규입니다.
오늘은 지난번 리스트박스를 조금 개량해보도록 하겠습니다.
https://stat-and-news-by-daragon9.tistory.com/264
[엑셀VBA] 리스트박스에 항목(목록) 추가하기 Listbox
안녕하세요 춤추는초코칩입니다. 엑셀 함수 마법사 창을 보면, 함수 선택이란 부분이 있습니다. 사용자 정의 폼(유저 폼)에서 리스트박스(목록상자)을 활용해서 만들어 보겠습니다. 1. 리스트박
stat-and-news-by-daragon9.tistory.com
개량할 내용은 기본 리스트박스에 체크박스를 만들어, 하나가 아니라 여러 개를 선택할 수 있도록 만들 예정입니다.
기존 리스트박스를 보면, ABS부터 8개의 목록을 확인할 수 있습니다. 여러 개를 선택할 수 있도록 하고, 항목들 앞에 체크박스를 추가하려면, 2가지를 설정해야 합니다. 첫 번째는 MultiSelect, 두 번째는 ListStyle입니다.

1. 다중선택 설정하기(MultiSelect)
MultiSelect 옵션은 3가지가 있습니다. 기본 옵션인 fmMultiSelectSingle과 다중 선택 옵션인 fmMultiSelectMulti, fmMultiSelectExtended입니다. 기본 옵션은 fmMultiSelectSingle은 단일 선택 기능입니다.

두 번째 fmMultiSelectMulti는
- 마우스를 클릭하면, 여러 항목을 선택하거나 취소할 수 있습니다.
- 방향키를 이용해 항목을 이동하고, 스페이스바를 눌러 여러 항목을 선택하거나 취소할 수 있습니다.
세 번째 fmMultiSelectExtended는
- 마우스를 클릭하면, 단일 선택이 됩니다.
- 쉬프트를 누른 상태에서 방향키를 눌러 여러 항목을 선택할 수 있습니다.
- 마우스를 드래그하여 선택할 수 있습니다.
- 컨트롤 키를 누른 상태에서 항목을 선택하면, 해당 항목이 선택되거나 취소됩니다.
우리는 직관적으로 사용할 수 있는 두 번째 옵션인 fmMultiSelectMulti를 선택하겠습니다.
Private Sub UserForm_Initialize()
Me.ListBox1.MultiSelect = fmMultiSelectMulti
End Sub
2. 체크박스 만들기(ListStyle)
ListStyle 옵션은 2가지가 있습니다. 기본 옵션인 fmListStylPlain과 선택 옵션인 fmListStyleOption입니다.

Plain은 아무것도 없는 담백한 느낌(?)이고, Option은 옵션 버튼 혹은 체크박스가 생깁니다. 옵션 버튼과 체크박스를 선택하는 것은 MultiSelect의 옵션입니다. fmMultiSelectSingle인 경우에는 옵션 버튼이 생기고, fmMultiSelectMulti나 fmMultiSelectExtened인 경우에는 체크박스가 됩니다.


따라서, 우리는 fmListStyleOption을 설정해야 합니다.
Private Sub UserForm_Initialize()
Me.ListBox1.ListStyle = fmListStyleOption
End Sub
3. 시트에 선택된 항목 입력하기
리스트박스 내에 체크박스를 추가하였습니다. 이제는 다중 선택된 항목을 시트에 입력해 보도록 하겠습니다. 명령 단추를 추가하고, 클릭 시 입력 이벤트가 발생하도록 하겠습니다. 사용된 리스트박스의 속성은 다음과 같습니다.
- ListCount: 리스트박스의 행의 개수
- Selected: 각 항목의 선택 여부. 0부터 시작되는 배열. 선택되었으면 TRUE, 아니면 FALSE
- List: 각 항목. 0부터 시작되는 배열
Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Integer
j = 1
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
Cells(j, 1) = ListBox1.List(i)
j = j + 1
End If
Next i
End Sub
리스트박스 내에 항목을 선택하고, 추가하기 버튼을 누르면, A1부터 선택된 값이 입력되는 것을 확인할 수 있습니다.

'엑셀VBA' 카테고리의 다른 글
[엑셀VBA] 매크로 속도 측정하기 Timer (0) | 2023.01.03 |
---|---|
[엑셀VBA] 파일명 일괄 변경하기 Name As (0) | 2023.01.02 |
[엑셀VBA] 텍스트 박스에 숫자만 입력되도록 하기 (0) | 2022.12.23 |
[엑셀VBA] 스핀 단추(SpinButton) 초기값, 최소값, 최대값, 간격 설정 (0) | 2022.12.19 |
[엑셀VBA] 컨트롤 탭(tap) 순서 정렬하기 TapIndex (0) | 2022.12.07 |