• 최초 작성일: 2000-11-21
  • 최종 수정일: 2026-09-30
  • 조회수: 10 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 내용이 변하는 ListBox 만들기 Ⅱ

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

이번 시간에는 질문 하나를 살펴봅니다.

VB0031 강좌에서는 단추를 누를 때마다 리스트 박스의 내용이 변하는데, 유저폼을 쓰지 않고 일반 시트에 드롭다운 버튼을 그려서 비슷하게 작동하게 하려고 하지만 잘 안 된다는 질문입니다. 자세한 설명을 부탁하셨습니다.

날씨가 점점 추워지니 건강 조심하시라는 인사도 함께 주셨습니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

내용이 변하는 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 변수를 활용하면 클릭할 때마다 상태가 번갈아 바뀌는 간단한 토글 기능을 만들 수 있습니다.