통합 문서1.xlsx 파일에서 한 행씩 추출해서
파워포인트에 슬라이드를 추가하고
세로 막대 그래프를 생성하는 예제입니다.
차트 생성은 엑셀에 의존하는 작업이라 약간의 시간이 소요됩니다.
또한 작업 중에 창을 건드리면 오류가 날 수 있습니다.
내부적으로 슬라이드에 차트를 추가하고
데이터 입력 엑셀창에서 통합문서1.xlsx파일 엑셀 시트의 값들을 한 행씩 복사해서
SetSourceData로 차트에 반영될 데이터 영역을 지정해주고 있습니다.
더보기
Option Explicit
'AddChart2
'ChartData 엑셀에 데이터를 붙여넣는 방식
Sub AddCharts()
Dim xlsApp As Object
Dim xlsBook As Object, pptBook As Object
Dim xlsSht As Object, pptSht As Object
Dim xlsName As String
Dim rng As Object
Dim LastRow As Long, LastCol As Long
Dim pres As Presentation
Dim Sld As Slide
Dim shp As Shape
Dim SW!, SH!, m!
Dim i As Integer
Dim srs As Series
Dim Cols() As Long
Set pres = ActivePresentation
xlsName = pres.Path & "\통합 문서1.xlsx"
On Error GoTo Oops
Set xlsApp = CreateObject("Excel.Application")
Set xlsBook = xlsApp.Workbooks.Open(xlsName)
Set xlsSht = xlsBook.Worksheets(1)
'마지막 행과 열
LastRow = xlsSht.Cells(xlsSht.Rows.Count, "A").End(-4162).Row '-4162: xlUp
LastCol = xlsSht.Cells(1, xlsSht.Columns.Count).End(-4159).Column '-4159: xlToLeft
If LastRow < 2 Then Exit Sub
'슬라이드 크기
With pres.PageSetup
SW = .SlideWidth: SH = .SlideHeight
End With
m = 100 '여백
'랜덤 막대 색깔
Randomize
ReDim Cols(1 To LastCol - 1)
For i = 1 To LastCol - 1
Cols(i) = RGB(125 + Rnd * 125, 125 + Rnd * 125, 125 + Rnd * 125)
Next
'A열 순환
For Each rng In xlsSht.Range("A2:A" & LastRow)
Set Sld = pres.Slides.Add(pres.Slides.Count + 1, ppLayoutBlank)
Set shp = Sld.Shapes.AddChart2(201, xlColumnClustered, m, m, SW - 2 * m, SH - 2 * m)
With shp.Chart
'.ChartType = xlLine '선
'.ChartType = xl3DBarClustered '가로 3D막대
'.ChartType = xl3DColumn '세로 3D막대
.ChartType = xlColumnClustered '차트Typee
.HasLegend = False '범례
.HasTitle = True
.ChartTitle.Text = rng '차트 제목
.Name = "Table1" '도형이름
.PlotBy = xlColumns '열 기준
'.ChartData.Activate
Set pptBook = .ChartData.Workbook '데이터 창의 엑셀
Set pptSht = pptBook.Worksheets(1) '데이터 창의 Sheet 1
pptSht.Cells.Clear
'기본으로 추가되는 기존 데이터 모두 삭제
'While .SeriesCollection.Count
' .SeriesCollection(.SeriesCollection.Count).Delete
'Wend
pptSht.Range("B1:" & xlsSht.Cells(1, LastCol).Address).Value = _
xlsSht.Range("B1:" & xlsSht.Cells(1, LastCol).Address).Value
pptSht.Range("A2") = rng
pptSht.Range("B2:" & xlsSht.Cells(2, LastCol).Address).Value = _
xlsSht.Range(rng.Offset(, 1), xlsSht.Cells(rng.Row, LastCol)).Value
'=Sheet1!$A$1:$H$2
.SetSourceData pptSht.Name & "!$A$1:" & xlsSht.Cells(2, LastCol).Address
DoEvents
'최대/최소값과 단위
.Axes(2).MaximumScale = 100 '2:xlValue, 1:xlCategory
.Axes(2).MinimumScale = 0 '2:xlValue, 1:xlCategory
.Axes(2).MajorUnit = 10
'첫번째 계열
With .SeriesCollection(1)
'막대 색깔 변경
For i = 1 To LastCol - 1
.Points(i).Format.Fill.ForeColor.RGB = Cols(i)
Next i
'라벨
.ApplyDataLabels
End With
'.ChartData.Workbook.Close '데이터 엑셀창 닫기
pptBook.Close
End With
'Exit For
Next rng
MsgBox "All done!"
Oops:
If Err Then MsgBox Err.Description
If Not xlsBook Is Nothing Then xlsBook.Close
If Not xlsApp Is Nothing Then xlsApp.Quit: Set xlsApp = Nothing
End Sub
통합 문서1.xlsx에 데이터를 입력하시고
첨부한 pptm을 매크로 허용해서 여시고 Alt-F8누른 다음에 AddCharts 를 실행하세요.
데이터의 개수 즉 행이나 열개수는 늘어나도 됩니다.
작업시간이 약간 소요되는데 작업이 끝나면 All done 이라는 메시지창이 뜹니다.
참고
- 차트에 데이터를 입력할 때 SetSurceData 를 이용하지 않고
SeriesCollection 을 추가해서 값을 직접 넣어줄 수도 있습니다.
(pptm 파일의 Module2 참고)
- AddChart2 함수이전에는 AddChart 함수를 사용했었습니다.
(Module3 참고)
- 차트는 엑셀에 의존하기 때문에 시간이 걸리고
개체 오류도 발생하기 쉽습니다.
데이터 창이 뜨는 것을 제어해줘야 합니다.
- 차트의 종류를 바꾸거나
차트 색깔 변경, 최대값/최소값 변경, 단위 변경 등은 주석을 참고하세요.
관련: 지식인
'PPT+VBA' 카테고리의 다른 글
프랙탈1 - Sierpinsky 삼각형 그리기 (0) | 2023.09.27 |
---|---|
차트(Moon Chart) 자동으로 그리기 (0) | 2023.09.04 |
도형의 Node를 대칭되게 조절 (0) | 2023.08.23 |
파워포인트 표안의 셀 병합여부, 첫번째 셀인지, 병합된 순서, 범위 등 알아내기 (0) | 2023.07.29 |
스핀버튼을 눌러 총금액계산 (1) | 2023.05.21 |
SRT 자막을 책갈피 애니메이션효과로 자동 변환 (0) | 2023.05.16 |
오디오책갈피를 이용한 자막 애니메이션 자동 추가 (0) | 2023.05.03 |
슬라이드 영역을 벗어난 부분 자동으로 잘라내기 (0) | 2023.04.28 |
최근댓글