- 최초 작성일: 2000-11-21
- 최종 수정일: 2026-09-30
- 조회수: 10 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 내용이 변하는 ListBox 만들기 Ⅱ
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
이번 시간에는 질문 하나를 살펴봅니다.
VB0031 강좌에서는 단추를 누를 때마다 리스트 박스의 내용이 변하는데, 유저폼을 쓰지 않고 일반 시트에 드롭다운 버튼을 그려서 비슷하게 작동하게 하려고 하지만 잘 안 된다는 질문입니다. 자세한 설명을 부탁하셨습니다.
날씨가 점점 추워지니 건강 조심하시라는 인사도 함께 주셨습니다.
내용이 변하는 ListBox 만들기 Ⅱ
핵심 요약: 내용이 변하는 드롭다운
Static 변수로 토글 상태를 기억하고, 버튼을 누를 때마다 드롭다운의 List 속성을 서로 다른 범위로 바꿉니다.
- 1단계: Static 변수로 직전 상태(True/False)를 유지합니다.
- 2단계: 상태에 따라 cmb.List에 화장품 또는 컴퓨터 범위를 대입합니다.
- 3단계: blnOK = Not blnOK으로 상태를 뒤집어 다음 클릭에 대비합니다.
Step 1: 동작 살펴보기
아래의 Click 버튼을 누를 때마다 리스트 박스의 내용이 어떻게 변하는지 살펴보시기 바랍니다.
버튼을 누를 때마다 리스트 박스의 내용이 화장품/컴퓨터가 서로 번갈아 가면서 바뀌지요? 코드를 살펴보지요. 아주 간단합니다.
Sheet2에는 아래와 같이 목록으로 사용할 범위가 이름으로 정의되어 있다고 가정합니다(위쪽 6건만 표시했습니다).
| 화장품(이름 정의 범위) | 컴퓨터(이름 정의 범위) |
|---|---|
| 아이오페 | 센스 |
| 라네즈 | 멀티캡 |
| 마몽드 | 대우 |
| 헤라 | 드림북 |
| 설화수 | 레티튜드 |
| 리리코스 | IBM |
Step 2: 코드 작성하기
Sub ChangeComboBoxList()
Static blnOK As Boolean
Dim sht As Worksheet
Dim cmb As Object
Set sht = ActiveSheet
Set cmb = sht.DropDowns("MyCombo")
'//언제나 그랬듯이 필요한 변수를 먼저 선언합니다. 여기서 blnOK 변수를 Static 변수로
'//선언해 준 것에 유의하시기 바랍니다. 이렇게 하면 프로시저를 시작하더라도 직전의
'//값을 간직하고 있게 됩니다.
'//만약 차이점을 파악하시려면 이 구문을 Dim blnOK As Boolean으로 고친 다음에
'//실행해 보세요.
If blnOK Then
cmb.List = Application.Transpose(Range("화장품").Value)
cmb.ListIndex = 1
Range("Result") = "화장품 선택"
'//blnOK의 값이 True이면 콤보박스의 리스트를 "화장품"이라는 범위 내에 있는 값들로
'//채워 넣고…("화장품"이라는 범위는 Sheet2에 있습니다)
Else
cmb.List = Application.Transpose(Range("컴퓨터").Value)
cmb.ListIndex = 1
Range("Result") = "컴퓨터 선택"
'//blnOK의 값이 False이면 콤보박스의 리스트를 "컴퓨터"라는 범위 내에 있는 값들로
'//채워 넣고 "Result" 영역의 값을 "컴퓨터 선택"이라는 문자열로 대체합니다.
End If
blnOK = Not blnOK
'//이렇게 해 주어야 버튼을 한번 누를 때마다 True, False가 번갈아가며 지정이 됩니다.
'//일종의 토글 기능이라고 할 수 있습니다.
End Sub
이 예제의 DropDowns는 옛 양식 컨트롤의 콤보 상자입니다. DropDowns("이름")은 지금도 사용할 수 있지만, 요즘 코드에서는 Shapes("이름").ControlFormat으로 접근하는 방법도 많이 사용합니다.
마무리
오늘은 간단하게 여기까지 하겠습니다.
다음 시간에 또…
정리 — 드롭다운 목록 변경 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 상태 기억 | Static blnOK As Boolean | 프로시저가 끝나도 값 유지 |
| 개체 참조 | sht.DropDowns("MyCombo") | 워크시트 드롭다운 지정 |
| 목록 채우기 | cmb.List = ... | 목록 값 지정 |
| 선택 지정 | cmb.ListIndex = 1 | 첫 항목 선택 |
| 토글 | blnOK = Not blnOK | True/False 번갈아 지정 |
자주 묻는 질문 (FAQ)
Q1. Static 변수는 일반 변수와 어떻게 다른가요?
프로시저가 끝나도 값이 사라지지 않고 다음 실행 때 직전 값을 그대로 가지고 있습니다.
Q2. 드롭다운의 목록은 어떻게 바꾸나요?
DropDowns 개체의 List 속성에 새 값을 대입하면 목록이 바뀝니다.
Q3. 토글 기능은 어떻게 구현하나요?
Boolean 변수에 Not 연산자를 적용해 True와 False를 번갈아 바꾸면 됩니다.
마치며
Static 변수를 활용하면 클릭할 때마다 상태가 번갈아 바뀌는 간단한 토글 기능을 만들 수 있습니다.