• 최초 작성일: 2000-09-27
  • 최종 수정일: 2026-09-30
  • 조회수: 12 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 유저폼에 차트 표시하기

들어가기 전에

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

Excel 95 이전 버전에서 다이얼로그 시트에 차트를 표시하는 것은 매우 간단했습니다. 그저 차트를 "복사" 한 다음, Dialog Sheet에다 "붙여넣기"만 하면 되었으니까요.

하지만 희안(!)하게도 버전업되면서 차트를 UserForm 상에 직접 붙여넣는 방법은 없습니다(제가 알기로는 그렇습니다. 혹시 방법을 아시는 분은 알려주세요). 하지만 그렇다고 해서 유저폼에 차트를 붙여넣는 것이 불가능 한 것은 아닙니다.

유저폼이 기존의 다이얼로그 시트에 비해 진일보된 형태인 것은 분명하지만, 적어도 이 부분에 있어서만큼은 MS社의 프로그래머들이 간과하고 넘어간 것이 아닌가 하는 생각이 듭니다(이 기능이 전혀 필요없다면 모르겠지만 지난 시간에 질문하신 분처럼 필요한 경우가 분명히 있으니까요).

그리고 이것은 어디까지나 제 개인적인 견해입니다만 차후 Excel이 Upgrade될 때, 이 부분은 다시 추가가 되지 않을까 조심스레 추측해 봅니다. 아니면 말고… ^^

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

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

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


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

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

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

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

유저폼에 차트 표시하기

핵심 요약: 유저폼에 차트 표시하기

차트를 그림 파일로 내보낸 다음 Image 컨트롤에 불러오는 우회 방법으로 유저폼에 차트를 표시합니다.

  • 1단계: 워크시트에 차트를 만들고 UserForm에 Image 컨트롤과 옵션버튼을 배치합니다.
  • 2단계: 옵션버튼 클릭 시 UpdateChart에 차트 종류를 전달합니다.
  • 3단계: ChartType을 바꾸고 Export한 뒤 LoadPicture로 불러옵니다.

Step 1: 결과 미리 보기

본론으로 들어 갑니다. 아래의 버튼을 눌러 오늘 만들어 볼 예제를 실행시켜 보시기 바랍니다.

재미있지 않습니까? 불가능한 것처럼 여겨졌던 유저폼에 그래프를 표시할 뿐 아니라 마우스로 선택하기만 하면 막대/꺾은선/영역형 그래프가 자동으로 생성되고… 여러분들이 어떻게 응용을 하느냐에 따라 이보다 재미있는 것을 얼마든지 만드실 수 있을 것입니다.

이제 이것을 만드는 방법을 단계별로 설명을 드리겠습니다.

Step 2: 차트와 UserForm 준비하기

(1) 먼저, 아래와 같은 표를 가지고 그래프를 하나 만듭니다. 그래프는 막대, 꺾은선, 영역형 중 어느 것을 그려도 상관없으나 여기서는 막대그래프를 하나 그렸습니다.

지점명판매금액
강동1000
강남2000
강북1730
부산1000
대구1590
대전1200
광주1900

(2) VB Editor를 실행시키고 유저폼을 하나 삽입한 다음, 아래와 같이 컨트롤들을 추가합니다. 다른 컨트롤은 아실 것이고… Image라는 새로운 컨트롤이 등장합니다.

차트를 표시할 UserForm: Image 컨트롤, 차트 종류 옵션버튼, 닫기 버튼
아이엑셀러

Step 3: 코드 작성하기

(1) 초기화 이벤트

(3) 유저폼에서 컨트롤이 없는 빈 공간을 더블클릭한 다음, 이벤트 선택 상자에서 초기화 이벤트(Initialize)를 선택하고 아래의 코드를 삽입합니다.

Private Sub UserForm_Initialize()
    optColumn.Value = True
    '//optColumn은 옵션버튼 중에서 "막대형"의 이름입니다. 따라서 유저폼이 호출이 되면
    '//초기값으로 막대 그래프가 선택이 되도록 설정하는 것입니다.
End Sub

(2) 옵션버튼 클릭 이벤트

(4) Shift + <F7>키를 눌러 유저폼으로 돌아간 다음, 옵션버튼 중에서 "막대형"을 더블클릭하면 클릭 이벤트가 하나 생성되는데 여기에 해당 코드를 입력합니다.

Private Sub optColumn_Click()
    Call UpdateChart(xlColumnClustered)
    '//즉 이 옵션버튼을 클릭하면 UpdateChart라는 프로시저를 실행을 하는데, 이 때
    '//xlColumnClustered라는 값을 매개변수(parameter)로 함께 전달을 합니다.
End Sub

(5) 유저폼으로 돌아가서, 이번에는 "꺾은선형"을 더블클릭하고 다음과 같은 코드를 작성합니다.

Private Sub optLine_Click()
    Call UpdateChart(xlLineMarkers)
    '//(4)와 같은데 xlLineMarkers라는 값을 호출하는 프로시저에 전달한다는 점이 다릅니다.
End Sub

(6) 유저폼으로 가서, "영역형"을 더블클릭하고 필요한 코드를 입력합니다.

Private Sub optArea_Click()
    Call UpdateChart(xlAreaStacked)
    '//이번에는 xlAreasStacked를 전달하는군요.
End Sub

(3) UpdateChart 프로시저

(7) 이번에는 각 이벤트 프로시저에서 공통적으로 호출하는 UpdateChart 프로시저를 작성합니다. 이 부분이 오늘 강좌의 핵심입니다.

Private Sub UpdateChart(CType)
    '//프로시저를 실행할 때 Ctype라는 값을 받으면서 시작되었습니다.
    '//Ctype에는 어느 프로시저에서 호출을 하느냐에 따라 xlColumnClustered, xlLineMarkers,
    '//xlAreaStacked 중에서 하나가 지정이 될 것입니다.

    Dim cht As Chart
    Dim strFile As String

    Set cht = Sheets("Preface").ChartObjects(1).Chart
    '//cht 변수에 Preface시트에 있는 첫번째 차트를 담아 둡니다.

    cht.ChartType = CType
    strFile = ThisWorkbook.Path & Application.PathSeparator & "Temp.gif"
    '//차트 형태를 지정해 주고, strFile 변수에는 현재 파일이 있는 경로명\Temp.gif라는
    '//값(실제로는 파일 경로\파일명)이 저장됩니다.

    cht.Export Filename:=strFile, filtername:="GIF"
    Image1.Picture = LoadPicture(strFile)
    '//현재 차트를 GIF 형태의 그림파일로 내보냅니다.
    '//그런 다음에 Image1 컨트롤로 다시 Loading, 즉 불러들이는 것입니다. 다시 말해서 차트를
    '//유저폼에 다가 바로 붙여넣을 수 없으니까 이것을 그림으로 만들어서 내보냈다가 이것을
    '//다시 불러다가 사용하는 것이지요.

End Sub

(4) 닫기 버튼과 폼 호출

Private Sub btnClose_Click()
    Unload Me
End Sub

Sub ShowChartForm()
    UserForm1.Show
End Sub

마무리

엄청 간단하지 않습니까? ^^

정말이지 다른 랭귀지로 이런 것을 하나 만든다고 생각을 해 보세요. 머리카락이 한 웅큼은 빠질 것입니다. 예전에 Exceller가 C(Visual C말고…)를 맛배기로 배울 때에는 이런 것은 상상 속에서나 존재했었습니다. 지금의 Visual C++은 어떤지 잘 알 수는 없지만 아마 그래도 여전히 어려울 것으로 생각됩니다.

많이들 응용해 보시기 바랍니다.

그럼…

정리 — 유저폼 차트 표시 핵심

구분 사용한 코드 역할
차트 지정 Sheets("Preface").ChartObjects(1).Chart 대상 차트
종류 변경 cht.ChartType = CType 막대/꺾은선/영역
내보내기 cht.Export Filename, filtername:="GIF" 그림 파일 생성
불러오기 Image1.Picture = LoadPicture(strFile) 유저폼에 표시
경로 ThisWorkbook.Path & Application.PathSeparator 임시 파일 위치

자주 묻는 질문 (FAQ)

Q1. 왜 차트를 그림으로 내보내나요?

유저폼에는 차트를 직접 붙여 넣을 수 없으므로, 그림으로 만들어 Image 컨트롤에 불러오는 방법을 사용합니다.

Q2. 차트 종류는 어떻게 바꾸나요?

UpdateChart 프로시저가 전달받은 값(xlColumnClustered, xlLineMarkers, xlAreaStacked)을 cht.ChartType에 지정합니다.

Q3. Image 컨트롤은 어떤 역할을 하나요?

그림 파일을 표시하는 컨트롤로, LoadPicture로 불러온 그림이 표시됩니다.

마치며

차트를 그림으로 바꾸어 불러오는 간단한 아이디어로 유저폼에서도 차트를 보여 줄 수 있습니다.