엑셀 사용자 정의 폼으로 데이터 자동화 — 폼 제작과 목록 검색 VBA 실습
안녕하세요! 이번 글에서는 엑셀 사용자 정의 폼(UserForm)을 활용해 사용자가 쉽게 데이터를 입력하고 검색할 수 있도록 만드는 방법을 기초부터 정리하겠습니다.
폼을 이용하면 복잡한 작업도 직관적인 창으로 처리 가능하며, VBA 코드와 이벤트 프로시저로 데이터 제어가 가능합니다.
1. 사용자 정의 폼이란?
엑셀의 사용자 정의 폼은 옵션 버튼, 콤보박스, 체크박스, 리스트박스 등을 배치하여 사용자로부터 다양한 입력을 받거나 결과를 표시할 수 있는 대화형 창입니다.
사용자 폼 열기
-
개발도구 → Visual Basic → 삽입 → 사용자 정의 폼
2. 폼 컨트롤 도구 설명
-
Label: 설명 텍스트
-
TextBox: 문자열 입력
-
ComboBox: 드롭다운 목록 중 선택
-
ListBox: 여러 항목을 보여주는 목록창
-
CheckBox: 복수 선택 가능
-
OptionButton: 단일 선택
-
CommandButton: 명령 실행 버튼
-
Frame: 그룹 묶기용
그 외 다양한 컨트롤 존재
3. 사용자 폼 제작 실습 — 출생연도 계산기
폼 구성
-
Label로 안내 문구 배치
-
TextBox로 나이 입력
-
CommandButton 클릭 → 출생연도 계산
폼 호출 매크로
1
2
3
|
Sub 창띄우기()
출생연도계산.Show
End Sub
|
cs |
계산 매크로 (폼 내 버튼 더블 클릭)
1
2
3
|
Private Sub CommandButton1_Click()
MsgBox “당신의 출생연도는 “ & (Year(Date) – TextBox1.Value) & “년 입니다.”
End Sub
|
cs |
4. 컨트롤 속성 설정
-
ControlTipText: 버튼 위 설명 문구
-
Text: 기본 입력 값
-
Value: 체크박스/옵션버튼의 초기 상태(True/False)
-
ComboBox Value: 첫 표시 값 설정 가능
5. 학과별 학생 목록 검색 폼 제작
데이터 이름 상자 설정
학과별 학생 명단 범위에 이름 정의
(예: 전산학과, 통계학과, 경영학과)
폼 구성
-
Label
-
ComboBox 또는 CheckBox
-
ListBox
-
CommandButton (검색, 닫기)
폼 호출 매크로
1
2
3
|
Sub 학과별검색()
UserForm1.Show
End Sub
|
cs |
검색 버튼 이벤트
1
2
3
4
5
6
|
Private Sub CommandButton2_Click()
ListBox1.Clear
If CheckBox1.Value = True Then Call insertCase(“통계학과”)
If CheckBox2.Value = True Then Call insertCase(“전산학과”)
If CheckBox3.Value = True Then Call insertCase(“경영학과”)
End Sub
|
cs |
insertCase 프로시저
1
2
3
4
5
6
7
8
9
|
Sub insertCase(dept As String)
For Each rw In Range(dept).Rows
Me.ListBox1.AddItem
Me.ListBox1.List(ListBox1.ListCount – 1, 0) = dept
For colNo = 1 To 3
Me.ListBox1.List(ListBox1.ListCount – 1, colNo) = rw.Cells(colNo).Value
Next colNo
Next rw
End Sub
|
cs |
코드 | 설명 |
---|---|
Sub insertCase(dept As String) |
dept 라는 문자열 값을 매개변수로 받는 프로시저 |
For Each rw In Range(dept).Rows |
dept 라는 이름의 Range 영역의 모든 행을 rw 에 담아 반복 |
Me.ListBox1.AddItem |
ListBox에 새 항목 추가 (빈 줄 추가) |
Me.ListBox1.List(ListBox1.ListCount - 1, 0) = dept |
방금 추가한 ListBox의 첫 번째 열(0번)에 dept 값 입력 |
For colNo = 1 To 3 |
1열부터 3열까지 반복 |
Me.ListBox1.List(ListBox1.ListCount - 1, colNo) = rw.Cells(colNo).Value |
방금 추가한 ListBox의 colNo번째 열에 rw의 colNo 셀 값을 넣음 |
Next colNo |
열 반복 끝 |
Next rw |
행 반복 끝 |
ListBox 더블 클릭 이벤트
1
2
3
4
5
6
7
8
|
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
msgStr = “선택한 학생은” & Chr(10) & _
“학과: “ & ListBox1.Column(0) & Chr(10) & _
“이름: “ & ListBox1.Column(1) & Chr(10) & _
“학년: “ & ListBox1.Column(2) & Chr(10) & _
“학점: “ & ListBox1.Column(3)
MsgBox msgStr
End Sub
|
cs |
ByVal Cancel As MSForms.ReturnBoolean
의미 정리
-
이벤트 프로시저의 매개변수
-
더블클릭 이벤트를 실행할지 취소할지 제어하는 플래그
-
타입은
MSForms.ReturnBoolean
True
또는False
값 가능True
로 설정하면 이벤트 실행 취소 -
값을 가져오는 용도가 아님 이 값은 단순히 이벤트 취소 여부만 결정
ListBox 값 가져오기: ListBox1.Column(열번호[, 행번호])
-
선택된 항목의 특정 열 값을 가져옴
-
기본 구조:
-
행번호를 생략하면 기본적으로 현재 선택된 첫 번째 항목의 값을 가져옴
중요 내용 정리
-
사용자 정의 폼으로 입력과 출력 모두 가능
-
폼 컨트롤 도구를 적절히 활용해 폼 구성
-
ControlTipText, Value, Text 속성 활용
-
매크로로 폼 띄우기:
폼이름.Show
-
이벤트 프로시저로 버튼, 리스트박스 클릭 시 기능 구현
-
데이터 이름상자 정의로 범위 쉽게 참조 가능
객관식 문제
1. 사용자 정의 폼을 엑셀에서 만들려면 어디서 시작해야 하는가?
① 삽입 → 차트
② 데이터 → 필터
③ 개발도구 → Visual Basic
④ 보기 → 매크로
정답: ③
해설: Visual Basic 편집기에서 폼을 생성 가능
2. 폼에서 여러 값 중 하나만 선택할 수 있는 컨트롤은?
① CheckBox
② OptionButton
③ ListBox
④ TextBox
정답: ②
해설: OptionButton(라디오 버튼)은 한 그룹 내에서 하나만 선택 가능
3. 다음 중 폼을 닫는 명령어는?
① Me.Hide
② End
③ UnLoad Me
④ Close
정답: ③
해설: UnLoad Me
는 해당 폼을 메모리에서 제거하고 닫음