• 최초 작성일: 2014-01-27
  • 최종 수정일: 2026-09-30
  • 조회수: 10 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: VBA 파워 코딩 235회 - 차트 계열색 바꾸기

들어가기 전에

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

차트를 만들면 계열 색상은 엑셀이 자동으로 지정해 줍니다. 그런데 셀에 지정해 둔 배경색을 그대로 차트에도 반영하고 싶다면 어떻게 해야 할까요? 이번 시간에는 셀 배경색과 차트 계열 색을 실시간으로 연동시키는 코드를 다뤄보겠습니다.

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

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

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


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

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

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

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

차트 계열 색을 셀 배경색과 똑같이 맞추기

핵심 요약: 셀 배경색을 차트 계열 색으로 연동하기

ChangeChartSeriesColor 프로시저는 차트 계열의 SERIES 수식에서 값 범위 주소를 뽑아낸 뒤, 각 포인트의 색을 대응하는 셀의 배경색으로 그대로 맞춰 줍니다.

  • 사전 준비: 값이 들어있는 셀들의 배경색을 원하는 색으로 지정
  • 실행 방법: 색상을 바꿀 차트를 선택한 뒤 프로시저 실행
  • 핵심 로직: Split(objSeries.Formula, ",")(2)로 값 범위 주소 추출
  • 적용 범위: 막대형, 원형 등 대부분의 차트 종류에서 동일하게 동작

평범한 차트에서 시작하기

왼쪽의 테이블을 이용하여 차트를 작성하면 대략 이런 모양이 나옵니다.

판매 수량
화동82
화서173
화남113
화북115
화중61

누구나 만들 수 있는, 그래서 어디서나 볼 수 있는 평범한 차트이지요. 이번에는 '수량' 열의 셀 배경색을 원하는 색으로 하나씩 지정한 다음, 차트를 선택한 후 버튼을 클릭해 보세요.

수량 열의 셀 배경색을 지정한 표와, 그 색이 그대로 반영된 막대형·원형 차트
아이엑셀러

무엇이 달라졌는지 눈치채셨나요? 그렇습니다! 셀의 배경 색에 따라 차트 계열(포인트)의 색상이 그대로 연동되어 바뀌었지요? 물론 원형 차트에만 가능한 것이 아니라, 막대형을 비롯한 다른 차트에서도 똑같이 작동합니다.

ChangeChartSeriesColor 프로시저 살펴보기

코드를 보도록 하지요. 색상을 바꾸고 싶은 차트를 먼저 선택한 다음 이 프로시저를 실행하면 됩니다.

Sub ChangeChartSeriesColor()

    Dim chtMyChart As Chart
    Dim objSeries As Series
    Dim varValue As Variant
    Dim intNum As Integer
    Dim strChartFormula As String

    On Error GoTo ET
    Set chtMyChart = ActiveChart

    For Each objSeries In chtMyChart.SeriesCollection
        strChartFormula = Split(objSeries.Formula, ",")(2)
        ' 차트 계열의 Formula 중 값(Values) 범위 주소를 Split 함수로 추출해 냅니다.
        varValue = objSeries.Values

        For intNum = 1 To UBound(varValue)
            ' 차트의 포인트 수만큼 돌면서 지정한 셀 색상으로 채웁니다.
            objSeries.Points(intNum).Interior.Color = Range(strChartFormula).Cells(intNum).Interior.Color
            ' 각 포인트의 색을 값 범위의 해당 셀 배경색과 똑같이 채웁니다.
        Next intNum
    Next objSeries

ET:
    If chtMyChart Is Nothing Then
        ' 차트를 선택하지 않은 상태에서 프로시저를 실행하면
        MsgBox "색상을 바꿀 차트를 먼저 선택하시라니깐요!!", , "아이엑셀러 닷컴"
        Exit Sub
    End If

End Sub

코드 설명

objSeries.Formula는 =SERIES(계열명, 항목범위, 값범위, 순서) 형태의 문자열입니다. 여기서 Split(objSeries.Formula, ",")(2)로 세 번째 조각, 즉 '값 범위' 주소만 뽑아냅니다. 그런 다음 For ~ Next 문으로 차트의 포인트(막대 하나, 파이 조각 하나 등)를 하나씩 돌면서, 그 포인트에 대응하는 셀의 Interior.Color를 그대로 Points(intNum).Interior.Color에 대입해 색을 맞춥니다.

참고: 오류 처리

차트를 선택하지 않은 상태에서 이 프로시저를 실행하면 ActiveChart가 Nothing이 되어 오류가 발생합니다. On Error GoTo ET로 이 오류를 잡아, "색상을 바꿀 차트를 먼저 선택하시라니깐요!!"라는 안내 메시지를 보여준 뒤 안전하게 종료하도록 처리했습니다.

차트(Chart 개체)는 가장 많은 하위 개체·속성·메서드를 거느리고 있는 개체입니다. 그만큼 다양한 기능과 역할을 수행할 수 있다는 의미이며, 서점에 가 보면 차트만 다루는 엑셀 책들이 즐비할 정도로 그 기능이 방대합니다.

정리 — ChangeChartSeriesColor 프로시저 핵심 요소

요소 역할
objSeries.Formula =SERIES(...) 형태의 계열 수식 문자열
Split(objSeries.Formula, ",")(2) 수식을 콤마로 나눈 세 번째 요소 — 값(Values) 범위 주소
objSeries.Points(intNum).Interior.Color 차트의 각 포인트(막대/조각) 색상
On Error GoTo ET 차트를 선택하지 않은 상태에서 실행했을 때의 오류 처리

자주 묻는 질문 (FAQ)

Q1. 막대형 차트에도 사용할 수 있나요?

네. 원형 차트뿐 아니라 막대형, 세로 막대형 등 SeriesCollection과 Points 컬렉션을 갖는 대부분의 차트 종류에서 동일하게 동작합니다.

Q2. 계열이 여러 개 있으면 어떻게 되나요?

For Each objSeries In chtMyChart.SeriesCollection 문으로 모든 계열을 순회하므로, 계열이 여러 개라도 각 계열마다 대응하는 값 범위의 셀 배경색이 반영됩니다.

Q3. 실행했는데 '차트를 먼저 선택하라'는 메시지가 뜹니다.

이 프로시저는 반드시 차트를 클릭해서 선택한 상태(ActiveChart가 존재하는 상태)에서 실행해야 합니다. 워크시트의 빈 셀이 선택된 상태에서 실행하면 이 메시지가 나타납니다.

마치며

Chart 개체는 파고들수록 다룰 거리가 끝없이 나오는 재미있는 개체입니다. 오늘 다룬 방법을 응용하면 데이터 시각화의 표현력을 한층 더 끌어올릴 수 있을 거예요!