非プログラマーでもできる!業務の自動化

ExcelのグラフをPowerPointに自動転送するVBAマクロの作成

当ページのリンクの一部に広告が含まれています。

課題・悩み「Excelのシートにあるたくさんのグラフを1つ1つPowerPointに貼り付けるのが面倒」

解決策「Excelのシートにある複数のグラフをPowerPointに自動で貼り付けるVBAマクロ」を解説

Excelで作成したグラフをPowerPointに転送する作業は、プレゼンテーション資料を作成する際によくあるタスクです。この記事では、そのプロセスを自動化するVBAマクロの作成方法について詳しく説明します。コードを少し変更するだけで、誰でも簡単に利用できます。

この記事では

【Excelのシートにある複数のグラフをPowerPointに自動で貼り付けるVBAマクロ】を図解で解説しています。

VBAマクロファイルを配布中。

以下のボタンよりダウンロードしてください。

目次

VBAマクロのExcelを使う前の準備

まず、マクロを実行する前に、ExcelファイルとPowerPointファイルのパスを確認しておく必要があります。

これらのパスは、Excelシート内の指定されたセル(例:C2にExcelファイルのパス、C7にPowerPointファイルのパス)に入力します。

また、どのグラフを転送するかも、Excelシート上で指定できるようにします。

Excelの1つのシートのうち3つのグラフまでコピーして、PowerPointの1つのスライドに自動で貼り付けます。

1シートと1スライドで対応しています。

ExcelからグラフをコピーしてPowerPointに貼り付けるVBAマクロのコード

このVBAマクロはExcelのグラフを読み込んで、PowerPointプレゼンテーションに自動的に貼り付けることを目的としています。

Option Explicit

Sub 全シートのグラフをPowerPointに貼り付ける()
    ' 変数の宣言
    Dim excelPath As String
    Dim pptPath As String
    Dim pptApp As Object
    Dim pptPres As Object
    Dim excelWb As Workbook
    Dim chartObj As ChartObject
    Dim i As Integer
    Dim j As Integer
    Dim sheetName As String
    Dim slideIndex As Integer
    Dim graphName As String

    ' エラーハンドリングの開始
    On Error GoTo ErrorHandler

    ' ExcelファイルとPowerPointのパスを取得
    excelPath = ThisWorkbook.Sheets("Sheet1").Range("C2").Value
    pptPath = ThisWorkbook.Sheets("Sheet1").Range("C7").Value

    ' PowerPointアプリケーションを開く
    Set pptApp = CreateObject("PowerPoint.Application")
    pptApp.Visible = True

    ' PowerPointファイルを開く(存在しない場合は新規作成)
    On Error Resume Next
    Set pptPres = pptApp.Presentations.Open(pptPath)
    If pptPres Is Nothing Then
        Set pptPres = pptApp.Presentations.Add
    End If
    On Error GoTo ErrorHandler

    ' Excelファイルを開く
    Set excelWb = Workbooks.Open(excelPath)
    
    ' シート名とグラフ名を取得してPowerPointに貼り付ける
    j = 3 ' D3から開始
    slideIndex = 1 ' 1枚目のスライドから開始
    Do While ThisWorkbook.Sheets("Sheet1").Cells(3, j).Value <> ""
        sheetName = ThisWorkbook.Sheets("Sheet1").Cells(3, j).Value
        
        ' グラフ名を基にコピー&ペースト
        For i = 3 To 5
            graphName = ThisWorkbook.Sheets("Sheet1").Cells(4, i).Value
            If graphName = "" Then Exit For
            
            If slideIndex > pptPres.Slides.Count Then
                pptPres.Slides.Add slideIndex, 11 ' 新しいスライドを追加
            End If
            
            ' グラフをコピーしてPowerPointに貼り付ける
            Set chartObj = excelWb.Sheets(sheetName).ChartObjects(graphName)
            chartObj.Copy
            With pptPres.Slides(slideIndex).Shapes.Paste
                .Left = ThisWorkbook.Sheets("Sheet1").Cells(11 + i - 3, 5).Value
                .Top = ThisWorkbook.Sheets("Sheet1").Cells(11 + i - 3, 6).Value
            End With
        Next i
        
        slideIndex = slideIndex + 1
        j = j + 1
    Loop

    ' 処理完了メッセージの表示
    MsgBox "PowerPointへの貼り付けが完了しました。"

Cleanup:
    ' オブジェクト変数のクリア
    Set pptPres = Nothing
    Set pptApp = Nothing
    Set excelWb = Nothing
    Set chartObj = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました。処理を中断します。"
    Resume Cleanup
End Sub

全体の処理の概要

準備

ExcelとPowerPointのファイルパスを取得します。

PowerPointの設定

PowerPointアプリケーションを開き、プレゼンテーションを開くか新規作成します。

Excelファイルの処理

指定されたExcelファイルを開き、グラフが含まれるシートを特定します。

グラフの貼り付け

各シートからグラフを読み込み、PowerPointに貼り付けます。

クリーンアップと完了メッセージ

不要になったオブジェクトをクリアし、処理が完了したことをユーザーに通知します。

処理ごとの解説

ファイルパスの取得

ExcelとPowerPointのファイルパスをExcelシートから読み取ります。

excelPath = ThisWorkbook.Sheets("Sheet1").Range("C2").Value
pptPath = ThisWorkbook.Sheets("Sheet1").Range("C7").Value

PowerPointの設定

PowerPointアプリケーションを開き、プレゼンテーションファイルを開くか新規に作成します。

Set pptApp = CreateObject("PowerPoint.Application")
Set pptPres = pptApp.Presentations.Open(pptPath)

Excelファイルの開き

指定されたパスのExcelファイルを開きます。

Set excelWb = Workbooks.Open(excelPath)

グラフの貼り付け

指定されたシートからグラフを読み取り、それらをPowerPointのスライドに貼り付けます。

For i = 3 To 5
Set chartObj = excelWb.Sheets(sheetName).ChartObjects(graphName)

クリーンアップと完了メッセージ

使用したオブジェクトを解放し、処理完了のメッセージを表示します。

Set pptPres = Nothing
MsgBox "PowerPointへの貼り付けが完了しました。
"

注意点

処理時間

データが大量にある場合、特に多くのグラフを含む大きなファイルの処理には時間がかかる可能性があります。

元に戻せない操作

VBAマクロで実行した操作は、一般的には元に戻せません。

特にファイルを上書き保存する場合は注意が必要です。

必要な環境設定

自分の環境で上記のコードを利用する際に変更が必要な箇所について説明します。

主に変更が必要なのは、ファイルパスや特定のセルの範囲を自分の環境に合わせて調整する部分です。

Microsoft Officeのインストール

このマクロを実行するには、Microsoft ExcelとPowerPointがインストールされている必要があります。

マクロの設定

Excelのセキュリティ設定で「マクロを有効にする」を選択している必要があります。

これは、ファイルを開く際にセキュリティ警告が表示された場合に、マクロを有効にすることで対応できます。

必要な変更点

Excelファイルパス

PowerPointに貼り付けたいExcelファイルのパスを指定します。

このパスは、Excelシート内の特定のセルに入力されていることを想定しています。

自分の環境に合わせて、Excelファイルの正確なパスをセルに入力するか、直接コードに書き込む必要があります。

excelPath = ThisWorkbook.Sheets("Sheet1").Range("C2").Value

PowerPointファイルパス

結果を貼り付けるPowerPointファイルのパスを指定します。

このパスもExcelシートのセルに入力するか、直接コードに書き込むことができます。

新規プレゼンテーションを作成する場合は、このパスは不要ですが、既存のプレゼンテーションに貼り付ける場合は正しいパスを指定する必要があります。

pptPath = ThisWorkbook.Sheets("Sheet1").Range("C7").Value

グラフ名と位置

PowerPointに貼り付けるグラフの名前と、その貼り付け位置を指定します。

これらの情報はExcelシートのセルに入力されていると想定していますが、自分の環境やニーズに合わせて変更する必要があります。

特に、グラフ名が入力されているセルや、グラフを貼り付ける位置を指定するセルの範囲を適切に設定してください。

graphName = ThisWorkbook.Sheets("Sheet1").Cells(4, i).Value
.Left = ThisWorkbook.Sheets("Sheet1").Cells(11 + i - 3, 5).Value
.Top = ThisWorkbook.Sheets("Sheet1").Cells(11 + i - 3, 6).Value

変更を行う理由

環境依存のパス

ファイルの保存場所は使用する環境によって異なるため、実際にこのマクロを使用する際には、自分の環境に合わせてExcelファイルやPowerPointファイルのパスを指定する必要があります。

グラフの指定

どのグラフをPowerPointに貼り付けるかは、使用するデータやプレゼンテーションの内容によって異なります。

したがって、貼り付けたいグラフの名前や位置は、具体的なニーズに応じて調整する必要があります。

まとめ:

このVBAマクロを使えば、Excelのグラフを効率的にPowerPointに転送し、プレゼンテーション資料の作成時間を大幅に短縮することができます。自分のニーズに合わせてカスタマイズし、より便利に活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次