다음을 통해 공유


Word 2010에서 VBA를 사용하여 차트 만들기

요약: VBA(Visual Basic for Applications)는 Microsoft Word 2010 및 Office Word 2007에서 차트를 만드는 기능을 제공하여 모든 문서에 대해 표준화된 모양을 적용할 수 있도록 합니다. Chart 개체 모델의 구조는 Excel 차트와 비슷하므로 쉽게 데이터를 추가하고 차트 종류를 선택하고 원하는 방식으로 차트 서식을 지정할 수 있습니다. 또한 VBA를 사용하여 외부 원본에서 데이터를 가져오고 컨트롤을 추가하여 Word 문서의 차트를 대화형으로 만들 수 있습니다.

마지막 수정 날짜: 2011년 4월 11일 월요일

적용 대상: Office 2010 | Open XML | VBA | Visual Studio Tools for Microsoft Office | Word 2007 | Word 2007 Service Pack 2 | Word 2010

이 문서의 내용
차트 추가
범례
차트 서식 지정
차트 크기 및 위치 변경
계열 더 추가
차트 종류 변경
고급 차트 작성
결론
추가 자료

게시 날짜: 2010년 5월

제공:  Peter Gruenbaum(영문일 수 있음)(SDK Bridge, LLC)

목차

  • 차트 추가

  • 범례

  • 차트 서식 지정

  • 차트 크기 및 위치 변경

  • 계열 더 추가

  • 차트 종류 변경

  • 고급 차트 작성

  • 결론

  • 추가 자료

코드를 가져오려면 클릭코드 다운로드(영문일 수 있음)

VBA(Visual Basic for Applications)를 사용하면 Microsoft Word 2010 및 Office Word 2007 SP2(서비스 팩 2)에서 Excel의 차트 기능을 모두 포함하는 차트를 만들 수 있습니다. VBA 코드는 다양한 원본에서 데이터를 가져와 여러 문서에서 표준화된 차트를 만들 수 있습니다.

Excel에서 차트를 만들어 문서에 붙여 넣는 대신 Word에서 VBA를 사용하여 차트를 만드는 경우 몇 가지 장점이 있습니다. 우선, 문서를 자동화하는 데 이미 VBA를 사용하고 있다면 VBA를 통해 차트를 만드는 것이 훨씬 효율적입니다. 또한 VBA를 사용하면 차트를 만들거나 업데이트하는 드롭다운, 단추 등의 컨트롤을 문서에 추가하여 문서를 대화형으로 만들 수도 있습니다.

Word의 Chart 개체 모델은 매우 단순합니다. 이 개체 모델에는 차트 데이터를 포함하는 Excel 개체에 대한 액세스 권한을 제공하는 속성이 들어 있어 Excel에서 차트를 만드는 것과 비슷한 방식으로 차트를 제어할 수 있습니다. 또한 Word의 Chart 개체 모델은 Excel의 Chart 개체 모델과 비슷하므로 차트를 만들기 위해 작성한 VBA 코드를 쉽게 Excel로 가져온 다음 Word로 이식할 수 있습니다. 자세한 내용은 Word 2010 개발자 참조에서 Chart 개체를 참조하십시오.

이 문서에는 두 가지 예제가 포함되어 있는데, 그 중 하나는 Word의 기본 차트(WordChart.docm)이고 다른 하나는 Excel에서 작성된 차트를 사용하는 대화형 Word 문서를 만드는 방법을 보여 주는 파일 쌍(ExcelWithChart.xlsm 및 WordChartLinkedToExcel.docm)입니다. 코드 예제는 MSDN 코드 갤러리(영문일 수 있음)에서 다운로드할 수 있습니다.

차트 추가

차트를 삽입하려면 Shapes 컬렉션의 AddChart 메서드를 사용하여 문서에 Chart 개체를 추가합니다.

참고

Office Word 2007 SP2 및 Word 2010에서는 InlineShapes 컬렉션을 통해 Chart 개체에 대한 참조를 가져올 수도 있습니다. Shape 개체는 텍스트 범위에 연결되지만 자유 부동형이므로 페이지에서 모든 위치에 놓을 수 있습니다. InlineShape 개체는 문자로 취급되므로 텍스트 줄에 문자로 삽입됩니다. 이 문서의 예제에서는 Shapes 컬렉션을 사용하여 Chart 개체에 대한 참조를 가져옵니다. InlineShapes 컬렉션을 사용하여 Chart 개체에 대한 참조를 가져오는 방법에 대한 자세한 내용은 Working With Charts을 참조하십시오.

Chart 개체는 해당 Workbook 속성을 통해 자동으로 Excel 스프레드시트와 연결됩니다. Workbook 속성은 Worksheet 개체를 포함합니다. 이제 Word에서 예제를 작성해 보겠습니다.

새 Word 문서를 만든 다음 "Insert Chart"라는 새 매크로를 만듭니다. Workbook, Worksheet 등의 Excel 개체에 액세스하려면 Excel API(응용 프로그래밍 인터페이스)를 참조해야 합니다. VBE(Visual Basic Editor)의 도구 메뉴에서 참조를 선택하고 그림 1과 같이 Microsoft Excel 14.0 Object Library 옆의 확인란을 선택합니다.

그림 1. 참조 대화 상자에서 Excel 참조 선택

Visual Basic Editor 참조 대화 상자

두 개의 변수(차트용으로 하나, 데이터가 저장될 워크시트용으로 하나)를 만듭니다.

    Dim salesChart As Chart
    Dim chartWorkSheet As Excel.Worksheet

이제 AddChart 메서드를 사용하여 활성 문서에 새 차트를 삽입하고 salesChart 변수로 설정합니다.

Set salesChart = ActiveDocument.Shapes.AddChart.Chart

워크시트는 차트에 연결된 통합 문서의 첫 번째 워크시트와 동일하게 설정합니다.

Set chartWorkSheet = salesChart.chartData.Workbook.WorkSheets(1)

차트를 추가하면 일부 예제 데이터가 포함된 Excel 스프레드시트가 만들어집니다. 데이터 크기를 셀 범위 A1~B5로 제한합니다. 이렇게 하려면 ListObject 클래스의 Resize 메서드를 사용합니다.

chartWorkSheet.ListObjects("Table1").Resize chartWorkSheet.Range("A1:B5")

예제 데이터에서 Series 1의 헤더를 "Sales"로 변경합니다.

chartWorkSheet.Range("Table1[[#Headers],[Series 1]]").FormulaR1C1 = "Sales"

마지막으로 데이터를 추가합니다.

    chartWorkSheet.Range("A2").FormulaR1C1 = "Bikes"
    chartWorkSheet.Range("A3").FormulaR1C1 = "Accessories"
    chartWorkSheet.Range("A4").FormulaR1C1 = "Repairs"
    chartWorkSheet.Range("A5").FormulaR1C1 = "Clothing"
    chartWorkSheet.Range("B2").FormulaR1C1 = "1000"
    chartWorkSheet.Range("B3").FormulaR1C1 = "2500"
    chartWorkSheet.Range("B4").FormulaR1C1 = "4000"
    chartWorkSheet.Range("B5").FormulaR1C1 = "3000"

이 예제에서는 단순히 코드에서 값을 설정합니다. Word 문서를 자동으로 생성하는 경우에는 데이터를 어디서나 가져올 수 있습니다. 또한 데이터가 Word 문서의 표에 있을 수도 있으며, 이 경우 VBA 코드는 값을 추출한 다음 워크시트 셀 수식을 해당 값으로 설정할 수 있습니다.

매크로를 실행하면 다음과 같은 차트가 표시됩니다.

그림 2. 기본 차트

기본 가로 막대형 차트

이 워크시트는 임시 항목이므로 일단 Excel 응용 프로그램을 닫아야 합니다. 다음 코드를 추가합니다.

salesChart.ChartData.Workbook.Application.Quit

범례

기본적으로 차트에는 범례가 있습니다. 범례는 데이터 열 머리글을 표시함으로써 그래프로 지정되는 데이터 형식을 나타냅니다. 차트에 둘 이상의 데이터 계열이 있어 차트의 각 부분이 데이터 테이블에서 어떤 열에 해당하는지를 표시할 수 있는 경우 범례는 특히 유용합니다. 현재 예제에는 열이 하나뿐입니다.

Chart 개체의 Legend 속성을 통해 범례에 액세스할 수 있습니다. 범례를 사용하지 않으려면 LegendDelete 메서드를 통해 제거할 수 있습니다.

salesChart.Legend.Delete

이 예제에서는 범례를 삭제하지 말고 Legend 개체 Line 속성의 Visible 속성을 msoCTrue로 설정하여 범례 주위에 상자를 표시합니다.

아래 이미지에서 범례 서식이 지정된 차트를 확인할 수 있습니다.

그림 3. 범례의 서식이 지정된 차트

범례가 있는 기본 차트

salesChart.Legend.Format.Line.Visible = msoCTrue

차트 서식 지정

이 예제의 차트는 현재 일반 차트입니다. 이제 배경 채우기를 테마 색 강조 1로 설정하여 차트를 보다 쉽게 확인할 수 있도록 몇 가지 서식을 추가로 지정하겠습니다. Office 테마 색을 사용하는 경우 차트가 Word 문서에 대해 선택하는 테마를 따르므로 문서 나머지 부분의 모양과 일치하게 됩니다.

With salesChart.ChartArea.Format.Fill
    .Visible = msoTrue
    .Solid
    .ForeColor.ObjectThemeColor = wdThemeColorAccent1
End With

다음으로 차트 주위에 검은색 테두리를 추가합니다.

With salesChart.ChartArea.Format.Line
    .Visible = msoCTrue
    .DashStyle = msoLineSolid
    .Weight = 3
End With

그런 다음 제목을 추가하고 서식을 지정합니다.

salesChart.HasTitle = True
With salesChart.ChartTitle
    .Characters.Font.Italic = True
    .Characters.Font.Size = 18
    .Format.TextFrame2.TextRange.Font.Fill.ForeColor.ObjectThemeColor = wdThemeColorMainLight2
    .Text = "2010 Sales"
End With

참고

Office 테마 색을 사용하지 않고 원하는 정확한 색을 직접 선택하려면 ObjectThemeColor 속성을 wdThemeColorMainLight2로 설정하는 줄을 다음과 같이 글꼴 색을 RGB(빨강/녹색/파랑) 값으로 설정하는 줄로 바꾸면 됩니다.

.Characters.Font.Color = RGB(0, 0, 100)

마지막으로 y축에 레이블을 추가하고 최대값을 5000으로 변경합니다.

With salesChart.Axes(xlValue)
    .HasTitle = True
    .AxisTitle.Text = "Revenue ($)"
    .MaximumScale = 5000
End With

다음 이미지에는 테마가 적용된 차트가 나와 있습니다.

그림 4. 테마가 적용된 차트

서식이 지정된 차트

Office 테마 색을 사용하는 경우의 영향을 확인하려면 Word 문서의 페이지 레이아웃 탭에서 테마를 변경해 봅니다. 그러면 차트의 색도 변경되는 것을 확인할 수 있습니다.

차트 크기 및 위치 변경

차트의 크기와 위치를 변경하려는 경우에는 차트 자체의 속성을 변경하지 말고 차트 상위 항목의 속성을 변경합니다. Parent 속성은 차트가 포함된 그래픽 개체를 반환하며, 이 그래픽 컨테이너를 배치하고 크기를 지정하면 차트가 올바른 크기로 적절한 위치에 표시됩니다. 예를 들어 차트 크기를 300 x 150픽셀로 지정하고 문서 왼쪽 100픽셀 위치에 표시하려면 다음을 수행합니다.

With salesChart.Parent
    .Left = 100
    .Width = 300
    .Height = 150
End With

계열 더 추가

표의 열 하나만 그래프로 만들 수도 있지만, 차트 내의 여러 열을 그래프로 만들 수도 있습니다. 각 데이터 열을 계열이라고 합니다. 차트에 다른 계열을 추가하려면 해당 계열에 대한 데이터를 추가하고 데이터 테이블을 확장해 데이터를 포함합니다. 이 작업은 Excel을 종료하는 줄 이전에 수행해야 합니다. 아래 코드는 Forecast 계열을 추가하고 해당 유형을 xlLine으로 설정하여 계열이 막대 그래프가 아닌 선 그래프로 표시되도록 합니다.

chartWorkSheet.ListObjects("Table1").Resize chartWorkSheet.Range("A1:C5")
chartWorkSheet.Range("Table1[[#Headers],[Series 2]]").FormulaR1C1 = "Forecast"
chartWorkSheet.Range("c2").FormulaR1C1 = "500"
chartWorkSheet.Range("c3").FormulaR1C1 = "3000"
chartWorkSheet.Range("c4").FormulaR1C1 = "2500"
chartWorkSheet.Range("c5").FormulaR1C1 = "4000"
salesChart.SeriesCollection(2).Type = xlLine

다음 이미지에는 계열 두 개가 추가된 차트가 나와 있습니다.

그림 5. 계열이 두 개인 차트

계열이 있는 차트

차트 종류 변경

Chart 개체를 사용하면 여러 차트 종류 중에서 선택할 수 있습니다. 두 번째 계열을 제거하고 차트 종류를 3차원 원형 차트로 변경합니다. 이렇게 하려면 Chart 개체에서 ChartType 속성을 변경합니다.

salesChart.ChartType = xl3DPie

다음 이미지에는 차트 종류를 3차원 원형 차트로 변경한 후의 차트가 나와 있습니다.

그림 6. 차트 종류를 3차원 원형 차트로 설정

테마가 적용된 원형 차트

고급 차트 작성

예제 코드에는 고급 차트 작성 예제도 나와 있습니다. 이 예제에서는 외부 Excel 파일의 데이터를 사용하며 Word 문서에 컨트롤을 삽입하여 문서를 대화형으로 만드는 방법을 보여 줍니다. 예제는 ExcelWithChart.xlsm 및 WordChartLinkedToExcel.docm의 두 파일로 구성됩니다. 이 두 파일을 사용하려면 다음 절차를 수행합니다.

대화형 Word 문서 차트 작성 예제를 만들려면

  1. WordChartLinkedToExcel.docm을 엽니다.

  2. ExcelWithChart.xlsm을 엽니다.

  3. ExcelWithChart.xlsm에서 차트를 선택합니다.

  4. ExcelWithChart.xlsm의 리본 메뉴에서 개발 도구, 매크로를 차례로 클릭한 다음 CopyChartToWord 매크로를 실행합니다. 그러면 차트가 Word 문서에 복사됩니다.

  5. Word로 돌아와서 드롭다운 상자 바로 아래에 삽입 지점을 놓습니다.

  6. ComboBox를 사용하여 각각 Q1, Q2, Q3, Q4에 해당하는 그래프 열을 표시합니다.

ComboBox의 Change 이벤트 처리기에는 다음 코드가 있습니다. 여기서는 외부 데이터를 사용하므로 ChartData 개체에 대해 Activate를 호출하여 Workbook에 액세스해야 합니다. 계열 이름과 값을 변경한 후에는 Chart 개체를 새로 고쳐야 변경 내용이 표시됩니다.

Private Sub ComboBox1_Change()
    Dim salesChart As Chart
    Dim chartWorkSheet As Excel.Worksheet
    
    ' The chart is the second shape. (The first is the ComboBox.)
    Set salesChart = ActiveDocument.InlineShapes(2).Chart
        
    ' Activate the data before you can access the workbook
    salesChart.ChartData.Activate

    ' Get the first worksheet
    Set chartWorkSheet = salesChart.ChartData.Workbook.Worksheets(1)
    
    ' Choose the series based on the ComboBox value
    Select Case ComboBox1.Value
        Case "Q1"
            salesChart.SeriesCollection(1).Name = chartWorkSheet.Range("B1")
            salesChart.SeriesCollection(1).Values = "='Sheet1'!$B$2:$B$5"
            
        Case "Q2"
            salesChart.SeriesCollection(1).Name = chartWorkSheet.Range("C1")
            salesChart.SeriesCollection(1).Values = "='Sheet1'!$C$2:$C$5"
            
        Case "Q3"
            salesChart.SeriesCollection(1).Name = chartWorkSheet.Range("D1")
            salesChart.SeriesCollection(1).Values = "='Sheet1'!$D$2:$D$5"
            
        Case "Q4"
            salesChart.SeriesCollection(1).Name = chartWorkSheet.Range("E1")
            salesChart.SeriesCollection(1).Values = "='Sheet1'!$E$2:$E$5"
            
    End Select
    
    ' Refresh chart so changes are visible
    salesChart.Refresh
    
    ' Minimize Excel
    chartWorkSheet.Application.WindowState = xlMinimized
End Sub

결론

Word에서는 Chart 개체를 사용하여 차트를 만들 수 있습니다. Shapes.AddChart 메서드는 새 차트를 만듭니다. 이 메서드의 Workbook 속성에 액세스하여 원하는 데이터만 포함되도록 테이블 크기를 조정한 다음 Worksheet.Range 속성을 사용하여 차트의 값을 설정합니다. Chart 개체를 사용하면 배경, 범례, 제목, 축 등 차트의 여러 부분에 서식을 지정할 수 있습니다. 또한 Word에서 외부 Excel 차트를 사용할 수도 있지만, ChartData.Activate 메서드를 사용해야 VBA 코드를 통해 통합 문서에 액세스할 수 있습니다.

추가 자료

자세한 내용을 확인하려면 다음 자료를 참조하십시오.