ExcelからPowerPointに表を貼り付け自動更新する方法

paste-and-update-table-from-excel-to-ppt VBA
この記事は約13分で読めます。
スポンサーリンク

本記事では、エクセル (Excel)に存在するテーブル・表のデータをパワーポイントに貼り付ける形で流し込み、自動で更新する方法を2つご紹介します。PowerPointに何度も手動でコピペを繰り返すことは、面倒でミスの原因にもなります。本記事でご紹介する方法を使用することで、自動的にデータを更新できるようになります。

本記事で実装する処理

結論

詳しい解説は個別のセクションで行いますが、こちらで簡単にExcelからPowerPointに表の貼り付け・自動更新を行い、データを流し込む方法を紹介します。

  1. エクセルの表をリンク貼り付けする
    Ctrl + Alt + Vから[形式を指定して貼り付け]→[リンク貼付け]→[Microsoft Excel ワークシート オブジェクト]を選択し、Excelのデータを貼り付けることで、エクセルを更新すると自動でデータが更新される表をパワーポイントに貼り付けることができます。
  2. VBAで表のデータを自動更新する
    下記のVBAを使用し、該当スライドの特定のデータをExcelから都度更新することができます。
    ([エクセル内のセル範囲]、[スライド番号(整数)]、[PPT内のテーブル名]、[PPT内でのテーブルの貼り付け開始セル位置]には、ご自身で値を入力してください。)
    Sub UpdateChartData()
        ' Written by consulting-campus.site
        '
        '
        '
        Dim ws As Worksheet
        Dim tbl As Range
        Dim strTargetShape As String, strTargetAddress As String
        Dim ppApp As Object, ppPres As Object, ppSlide As Object, ppShape As Object
        Dim intSlideNumber As Integer, intTargetRow As Integer, intTargetCol As Integer
     
        Set ws = ActiveCell.Worksheet
    
        ' ご自身で入力してください
        Set tbl = ws.Range([エクセル内のセル範囲])                  ' 入力してください
        intSlideNumber = [スライド番号(整数)]                      ' 入力してください
        strTargetShape = [PPT内のテーブル名]                       ' 入力してください
        strTargetAddress = [PPT内でのテーブルの貼り付け開始セル位置] ' 入力してください
     
        ' PowerPointアプリケーションを開始または取得
        On Error Resume Next
        Set ppApp = GetObject(, "PowerPoint.Application")
        If ppApp Is Nothing Then Set ppApp = CreateObject("PowerPoint.Application")
        On Error GoTo 0
        Set ppPres = ppApp.ActivePresentation
        Set ppSlide = ppPres.Slides(intSlideNumber)
    
        ' スライド内のオブジェクトをループ
        For Each ppShape In ppSlide.Shapes
            If ppShape.Name = strTargetShape Then
                ' テーブルの場合
                If ppShape.Type = msoTable Then
                    ppSlide.Select
                    intTargetRow = CLng(Mid(strTargetAddress, 2)) ' 行番号
                    intTargetCol = Columns(Left(strTargetAddress, 1)).Column ' 列番号
                    ' 表示されているセルのみをコピー
                    tbl.SpecialCells(xlCellTypeVisible).Copy
                    ' テーブルの特定のセルに値を貼り付け
                    ppShape.Table.Cell(intTargetRow, intTargetCol).Select
                    ppApp.CommandBars.ExecuteMso ("Paste")
                End If
                Exit For
            End If
        Next
        
        ' オブジェクトの解放
        Set ppApp = Nothing
        Set ppPres = Nothing
        Set excelRange = Nothing
        Set tbl = Nothing
        Set ws = Nothing
        MsgBox ("Done")
    End Sub
    

PowerPointでエクセルの貼り付け・自動更新方法解説

本記事では、エクセル (Excel)に存在するテーブル・表のデータをパワーポイントに貼り付け、自動で更新する方法を下記の2パターンご紹介します。クリックで該当セクションにジャンプします。

  1. エクセルの表をリンクし貼り付けする
  2. VBAで表のデータを自動更新する

なお、今回はこちらのデータを使用して解説しています。

1. エクセルの表をリンクし貼り付けする

この方法は、ExcelのデータをPowerPointに直接リンクさせることにより、Excelファイルの更新があるたびに、PowerPointの該当データも自動的に更新されるようにするものです。下記から全体のステップをご確認ください。(クリックで該当セクションにジャンプします)

Excelで表をコピー

まず、Excelファイル上でPowerPointに貼り付けたいデータを選択し、Ctrl + C でコピーします。

PowerPointで対象のスライドに移動し、Ctrl + Alt + V から[形式を指定して貼り付け]を実行します。次に、表示されたオプションから[リンク貼付け]を選び、[Microsoft Excel ワークシート (コード) オブジェクト]を選択して貼り付けます。

データの更新確認

Excelファイルのデータを変更し、PowerPoint内で自動更新が行われていることを確認します。


以上が、エクセルの表をリンクし貼り付けする方法のご紹介になります。こちらの方法では下記のようなメリットとデメリットがありますのでご使用の際には注意してください。

メリット
  • シンプルで直感的
デメリット
  • 画像形式のオブジェクトとして貼り付けられるため、パワポ上でのフォーマット調整が難しい
  • [リンクの更新]の実行に長時間かかってしまう
  • 不要な”セキュリティ警告”が表示されることがある
  • ファイルを名前変更、移動、メール共有、などするとリンクが更新できなくなる
  • Excel上で元データのセル範囲を変更してもパワポ上に反映されない

パワポの標準機能を使用したリンク貼付けはお手軽ではあるものの、デメリットも多いため、次のVBAを使用した方法がおすすめです。

2. VBAで表のデータを自動更新する

Excel VBAを使用して、PowerPoint内の特定の表データを自動的に更新する方法は、より高度な制御が可能となります。下記から全体のステップをご確認ください。(クリックで該当セクションにジャンプします)

パワポ上で表の用意

まずはじめに、パワポ上でフォーマッティングなどを完了させた表を用意します。行・列の項目名などは事前に設定しておくと好みのフォーマットを適用しやすくなります。今回はパワポ上でのテンプレートの書式を選択しています。

エクセルのビジュアルディタ上でパワポ参照設定の追加

Excel上でAlt + F11キーでビジュアルエディタを開き、同画面上の[ツール][参照設定]を開きます。

そして、表示された画面を下にスクロールしていき、[Microsoft PowerPoint XX Object Library]を選択し、チェックボックスがマークされている状態に設定してください。

VBAコードの貼り付け

次に、ビジュアルエディタから下記のコードを貼り付けてください。

Sub UpdateChartData()
    ' Written by consulting-campus.site
    '
    '
    '
    Dim ws As Worksheet
    Dim tbl As Range
    Dim strTargetShape As String, strTargetAddress As String
    Dim ppApp As Object, ppPres As Object, ppSlide As Object, ppShape As Object
    Dim intSlideNumber As Integer, intTargetRow As Integer, intTargetCol As Integer
 
    Set ws = ActiveCell.Worksheet

    ' ご自身で入力してください
    Set tbl = ws.Range([エクセル内のセル範囲])                  ' 入力してください
    intSlideNumber = [スライド番号(整数)]                      ' 入力してください
    strTargetShape = [PPT内のテーブル名]                       ' 入力してください
    strTargetAddress = [PPT内でのテーブルの貼り付け開始セル位置] ' 入力してください
 
    ' PowerPointアプリケーションを開始または取得
    On Error Resume Next
    Set ppApp = GetObject(, "PowerPoint.Application")
    If ppApp Is Nothing Then Set ppApp = CreateObject("PowerPoint.Application")
    On Error GoTo 0
    Set ppPres = ppApp.ActivePresentation
    Set ppSlide = ppPres.Slides(intSlideNumber)

    ' スライド内のオブジェクトをループ
    For Each ppShape In ppSlide.Shapes
        If ppShape.Name = strTargetShape Then
            ' テーブルの場合
            If ppShape.Type = msoTable Then
                ppSlide.Select
                intTargetRow = CLng(Mid(strTargetAddress, 2)) ' 行番号
                intTargetCol = Columns(Left(strTargetAddress, 1)).Column ' 列番号
                ' 表示されているセルのみをコピー
                tbl.SpecialCells(xlCellTypeVisible).Copy
                ' テーブルの特定のセルに値を貼り付け
                ppShape.Table.Cell(intTargetRow, intTargetCol).Select
                ppApp.CommandBars.ExecuteMso ("Paste")
            End If
            Exit For
        End If
    Next
    
    ' オブジェクトの解放
    Set ppApp = Nothing
    Set ppPres = Nothing
    Set excelRange = Nothing
    Set tbl = Nothing
    Set ws = Nothing
    MsgBox ("Done")
End Sub

なお、ExcelでVBAを扱う方法については下記の記事で詳細に解説しています。

コードの修正

コードの下記部分について、ご自身で任意の値を入力してください。

    ' ご自身で入力してください
    Set tbl = ws.Range([エクセル内のセル範囲])                  ' 入力してください
    intSlideNumber = [スライド番号(整数)]                      ' 入力してください
    strTargetShape = [PPT内のテーブル名]                       ' 入力してください
    strTargetAddress = [PPT内でのテーブルの貼り付け開始セル位置] ' 入力してください
  • [エクセル内のセル範囲]: エクセル内での対象のデータが存在するデータ範囲を入力します。(例: B2:D8)
  • [スライド番号(整数)]: パワポ上でデータを入力・更新したいスライド番号を入力します。
  • [PPT内のテーブル名]: Alt + F10で選択タブを表示し、オブジェクト名を入力します。なお、日本で表示される場合はアルファベットと記号のみの名前に変更してください。
  • [PPT内でのテーブルの貼り付け開始セル位置]: パワポ上での表のうち、貼付けを開始するセルの位置を指定してください。左上のセルをA1とし、通常のエクセルと同様の形式で入力します。(例: B2)
マクロの実行

設定を完了したら、このマクロを実行します。owerPointの該当スライドを開き、表が正しく更新されていることを確認します。

エクセル上から貼り付ける部分のファーマッティングについて、文字とテキストのアライメントに関するフォーマットはエクセル上のものが反映されるため、Excel上で任意の形式を設定してから実行するようにしてください。(文字色、フォント、文字サイズ、文字の中央揃えなど)


以上が、VBAで表のデータを自動更新する方法のご紹介になります。こちらの方法では下記のようなメリットとデメリットがあり、問題なく使用できる場合はこちらがおすすめです。

メリット
  • テーブルのフォーマットをパワポ上で設定できるため、柔軟なデザインが設定可能である
  • Excel上でのデータ範囲やパワポ上でのペースト開始位置を変更できるため、カスタマイズ性が高い
  • エクセルから、現在開いているパワポファイルに貼り付け可能であり、対象ファイルの拡張性が高い
デメリット
  • VBAを使用するため若干の知識が必要になる

おわりに

以上が、エクセル (Excel)に存在するテーブル・表のデータをパワーポイントに貼り付ける形で流し込み、以降自動で更新する方法のご紹介となります。

ご質問やご不明点などがありましたらお気軽にコメントお待ちしております。

ご精読いただきありがとうございました。

コメント

タイトルとURLをコピーしました