- 최초 작성일: 2002-03-28
- 최종 수정일: 2026-09-30
- 조회수: 15 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 콤보박스 연동 차트 만들기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
지난 시간에는 특정 셀을 선택하면 그 셀과 관련있는 정보들로 차트를 Updating하는 ActiveCell 연동 차트(Exceller가 붙여본 이름입니다 ^^)를 만들어 보았습니다. 이번 시간에는 약간 다른 형태의 재미있는 차트를 만들어 보도록 하지요. 이름하야 "콤보박스 연동 차트"(이것 역시 Exceller가 붙여본 이름입니다)…
일단 버튼을 눌러서 연습용 시트로 가신 다음 콤보 박스로 적당한 지역을 선택해 보세요.
지난 시간에 살펴본 'ActiveCell 연동 차트'와는 또다른 재미가 있지요?
콤보박스 연동 차트 만들기
핵심 요약: 콤보박스로 차트 갱신하기
콤보 상자를 셀에 연결하고 INDEX 함수로 선택한 지역의 데이터를 가져온 뒤, 콤보 상자에 매크로를 지정해 차트 제목과 안내 메시지를 함께 갱신합니다.
- 1단계: 소스 데이터로 차트를 만들고 옵션을 차트에서 직접 지정합니다.
- 2단계: 소스 테이블은 SelectionChange와 Intersect로 건드리지 못하게 합니다.
- 3단계: 콤보 상자를 그려 입력 범위와 셀 연결을 지정하고 ChangeChart 매크로를 연결합니다.
Step 1: 소스 데이터로 차트 만들기
(1) 소스 데이터를 이용하여 차트를 만듭니다. 차트의 각종 옵션값을 VBA로 핸들링 할 수도 있고 차트 상에서 직접 바꾸어 줄 수도 있습니다. 여기서는 코드를 간결하게 하기 위해 차트 상에서 바로 고쳐주고 작업을 계속합니다.
Step 2: SelectionChange 이벤트 작성
(2) VB Editor 상태에서 프로젝트 탐색창을 더블 클릭하고 코드 창에서 SelectionChange 이벤트를 선택한 다음 아래와 같은 코드를 작성합니다.
많이 낯이 익은 코드이지요? ^^ 어디서 보았을까요? 그렇습니다! Intersect 메서드에 대해 설명을 드릴 때 였지요? 차트의 소스 테이블은 누가 와서 점수를 슬쩍 올려 놓는다든지 하면 안되니까 아예 건들지 못하도록 하기 위한 것입니다. Intersect 메서드가 뭐였더라? 하는 분들은 얼른 VB0146 강좌를 열어보고 오세요.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngSelect As Range
On Error Resume Next
Set rngSelect = Intersect(Target, [Source])
If Not rngSelect Is Nothing Then Target.Next.Select
End Sub
Step 3: 콤보 상자 삽입
(3) '양식' 도구 모음에 있는 '콤보 상자' 아이콘을 선택하고 차트 영역 내부의 적당한 곳에 콤보 박스를 하나 그려 넣습니다. '입력 범위'나 '셀 연결" 등의 항목은 아래 그림과 같이 설정합니다.
Step 4: ChangeChart 프로시저
(4) 아래와 같은 코드를 작성합니다. 이 코드가 오늘 강좌의 핵심입니다.
Sub ChangeChart()
Dim chtChartObject As ChartObject
Dim chtChart As Chart
Dim strArea As String
Dim sngMax As Single
Dim sngMin As Single
Dim Msg As String
Set chtChartObject = ActiveSheet.ChartObjects(1)
Set chtChart = chtChartObject.Chart
strArea = [Region]
With chtChartObject.Chart
.HasTitle = True
.ChartTitle.Text = strArea & "지역 고객만족도 조사 결과"
End With
sngMax = Application.Max([ItemScore])
sngMin = Application.Min([ItemScore])
'''다른 부분은 지난 시간에 살펴본 것과 거의 다를 것이 없고… 차트 내의 최대값과
'''최소값을 알아내기 위하여 워크시트 함수인 Max와 Min 함수를 사용하였습니다.
MsgBox "선택하신 " & strArea & " 지역의" & vbCr & vbCr _
& Space(5) & "최고 점수는 " & Format(sngMax, "#.0%") & vbCr _
& Space(5) & "최저 점수는 " & Format(sngMin, "#.0%") & vbCr _
& vbCr & "입니다", , "VB0150//www.iExceller.com"
End Sub
다른 부분은 지난 시간에 살펴본 것과 거의 다를 것이 없고… 차트 내의 최대값과 최소값을 알아내기 위하여 워크시트 함수인 Max와 Min 함수를 사용하였습니다.
Step 5: 매크로 연결
(5) 콤보 박스를 오른쪽 마우스 버튼으로 클릭한 다음 (4)에서 작성한 코드를 연결시킵니다.
이제 콤보 박스를 클릭하여 지역을 선택하면 차트가 선택한 지역의 것으로 갱신되면서 안내 메시지 박스가 나타납니다.
많이 응용해 보시기 바랍니다.
오늘은 여기까지…
정리 — 콤보박스 연동 차트 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 콤보 상자 설정 | 입력 범위 $A$18:$A$27, 셀 연결 $A$3 | 선택한 지역 번호를 셀에 저장 |
| 데이터 추출 | =INDEX(A18:A27,$A$3) | 선택한 지역의 값 표시 |
| 제목 변경 | ChartTitle.Text = strArea & "지역 고객만족도 조사 결과" | 차트 제목 갱신 |
| 최대·최소값 | Application.Max/Min([ItemScore]) | 메시지 표시용 값 |
| 보호 | Intersect + Target.Next.Select | 소스 테이블 선택 방지 |
자주 묻는 질문 (FAQ)
Q1. 콤보 상자는 어디에서 삽입하나요?
'양식' 도구 모음의 '콤보 상자' 아이콘을 선택해 차트 영역 내부에 그린 뒤 컨트롤 서식에서 입력 범위와 셀 연결을 지정합니다.
Q2. 차트 소스 테이블을 왜 선택하지 못하게 하나요?
누가 와서 점수를 슬쩍 올려 놓는 일을 막기 위해 Intersect 메서드와 SelectionChange 이벤트로 접근을 차단합니다.
Q3. 콤보 상자에 매크로는 어떻게 연결하나요?
콤보 상자를 마우스 오른쪽 버튼으로 눌러 '매크로 지정'을 선택하고 ChangeChart를 지정합니다.
마치며
차트에 컨트롤을 연결하면 사용자가 선택하는 대로 결과가 갱신되는 인터랙티브한 보고서를 만들 수 있습니다.