VBAでExcelのグラフをパワーポイントに貼り付ける!

お疲れ様です、しるるです!

毎月毎月、偉い人から「このデータグラフにしてパワーポイントでちょーだい!」って言われて資料を作っているのですが、なんだかどんどんどんどんほしいものが増えてきて、もう貼り付けるのだるいよパトラッシュ…

ってなったのでようやくVBAで貼り付けるようにしました。

使ってみたらかなり快適になったので共有します。

私の作成したものは、Excelシートの一番右のシートから順番に、パワーポイントに貼り付けていくものです。Excelの1つのシートに1つのグラフじゃないとエラーになるので注意してください。完成後、pptchartというパワポが同じところに保存されます。


予め用意するもの

1/8追記
・参照設定でMicrosoft PowerPoint 16.0 Object Libraryのライブラリにチェックを入れてください!

・テンプレートのパワーポイントを作成して、Excelと同じところに保存してください!ファイル名は template、拡張子はpptxで。ファイル名を変えたい場合は、コードの中身のファイル名もいじってくださいね!

・スライドのタイトルをシートのA1に入力する

画像1

こんな感じで1枚ずつ貼り付けていきます。

貼り付けて位置調整して、サイズ調整してってめっちゃめんどくさいよね…

ほんとめんどくさすぎてしんどい…枚数増えれば増えるほどしんどいんじゃあああ!!!!

コード

Option Explicit
Sub ppt_chart()
   Dim ws As Worksheet
   Dim str As String
   Dim numSh As Long, c As Long

   Set ws = ActiveSheet

   'パワーポイントを立ち上げる
   Dim ppApp As New PowerPoint.Application
   ppApp.Visible = True

   '予め用意したtemplate.pptxを立ち上げる
   Dim pptx As PowerPoint.Presentation
   Set pptx = ppApp.Presentations.Open(ThisWorkbook.Path & "\template.pptx")

   Dim pptxsl As PowerPoint.Slide
   Set pptxsl = pptx.Slides(1)

   'タイトルのフォントサイズを変更(お好みで)
   If pptxsl.Shapes.HasTitle Then
       pptxsl.Shapes.title.TextFrame.TextRange.Font.Size = 22
   End If


   'Excelのシート数を調べ、グラフにするシートが左から何枚までか指定する(countShの数値を変更してください)
   Dim countSld As Long, countSh As Long
   numSh = Worksheets.Count
   countSh = 3
   
   '画像サイズの設定(高さと幅の調整してます。お好みで変更してください)
   Dim ppW As Single, ppH As Single
   With pptx.PageSetup
       ppH = .SlideHeight * 0.8
       ppW = .SlideWidth
   End With

   For c = 0 To numSh - countSh
           Worksheets(numSh - c).Activate
           ActiveSheet.ChartObjects.Select
           
           'A1セルの文字をタイトルにする
           str = Worksheets(numSh - c).Range("A1").Value
           
           countSld = pptx.Slides.Count
           '1ページ目をコピーしてスライドの最後に複製
           pptx.Slides(1).Duplicate.MoveTo (countSld + 1)

           'Excelのグラフを画像としてコピーする
           ActiveChart.ChartArea.Copy
           
           'エラー対策のため待機時間を設ける
           Application.Wait Now() + TimeValue("00:00:02")
           
           pptx.Slides(countSld + 1).Select
           'パワポの最後のスライドにグラフを貼り付ける
           pptx.Slides(countSld + 1).Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile, Link:=msoFalse


           '貼り付けたグラフの位置とサイズを変更する
           With pptx.Slides(countSld + 1).Shapes(pptx.Slides(countSld + 1).Shapes.Count)
               .LockAspectRatio = msoFalse
               .Top = 70
               .Left = 0
               .Width = ppW
               .Height = ppH
          End With

           'タイトルを変更する
           pptx.Slides(countSld + 1).Shapes.title.TextFrame.TextRange.Text = str

   Next

   'パワーポイントファイルを「pptchart」というファイル名で新しく保存する
   pptx.SaveAs ThisWorkbook.Path & "\pptchart.pptx"
   ppApp.Quit
   Set ppApp = Nothing
End Sub


この記事が気に入ったらサポートをしてみませんか?