Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » Excelのデータごとにスライドを作成するPowerPointマクロ

Excelのデータごとにスライドを作成するPowerPointマクロ

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

Excelのデータ1件ごとにPowerPointのスライドを作成する、Excelマクロをご紹介しました。

同じことを、PowerPointマクロで行うことも可能です。

[スポンサードリンク]

Excelのデータごとにスライドを作成するサンプルマクロ

仕様は、前回ご紹介した、Excelマクロと同じです。

フィールドは3列で、1行目からデータが入っていて、データ1件ごと・1レコードごとに、PowerPointのスライド1枚ごとに、1行3列の表の形にします。

Sub 開かれているExcelのアクティブシートからレコードごとにスライドを作成する()

 Dim xl_app As Object 'Excel Application
 Dim xl_sh As Object 'Excel Worksheet
 Dim c As Long  'Excel Column Number
 Dim r As Long  'Excel Row Number
 Dim r_end As Long 'Excel End Row Number
 Dim i As Long
 Dim msg As String

 On Error GoTo ERR_HNDL

 Set xl_app = GetObject(Class:="Excel.Application")
 Set xl_sh = xl_app.ActiveWorkbook.ActiveSheet
 r_end = xl_sh.Range("A1").End(-4121).Row '-4121 = xlDown

 msg = "『" & xl_sh.Name & "』シートから、" & r_end & "枚のスライドを作成しますか?"
 If MsgBox(msg, vbYesNo) = vbNo Then GoTo END_TASK

 With ActivePresentation.Slides

  i = .Count

  For r = 1 To r_end

   i = i + 1

   .Add _
    Index:=i, _
    Layout:=ppLayoutTable

   With .Item(i)

    .Shapes.AddTable _
     NumRows:=1, _
     NumColumns:=3

    With .Shapes(2).Table
     For c = 1 To 3
      .Cell(1, c).Shape.TextFrame.TextRange = _
       xl_sh.Cells(r, c).Text
     Next c
    End With

   End With

  Next r

 End With

 GoTo END_TASK

ERR_HNDL:

 msg = "エラーが発生したのでマクロを終了します。"
 MsgBox msg

END_TASK:

 Set xl_app = Nothing
 Set xl_sh = Nothing

End Sub

Excelが開かれていて、元データの含まれるワークシートが一番上にある状態で、上記のPowerPointマクロを実行すると、確認メッセージが表示されたあとに[はい]ボタンをクリックすると、PowerPointの末尾にスライドが追加されていきます。

サンプルマクロの解説

PowerPoint側から、Excelデータを引っ張ってきてスライドを作る場合、データの入力されているExcelファイルをどう指定するのかが、一つのポイントです。

ファイルを指定するダイアログをマクロの中で表示する方法、定数にExcelファイルのフルパスを指定する方法などが考えられますが、今回は、開いているExcelファイルの一番上になっている・アクティブシートを元データにするという方法にしました。

Excelファイルが開いていないときなどにエラーとなっていますので、エラー発生時には、ERR_HNDLまで飛ぶようにしています。
 On Error GoTo ERR_HNDL

開いているExcelファイルのアクティブシートを変数に格納して、
 Set xl_app = GetObject(Class:="Excel.Application")
 Set xl_sh = xl_app.ActiveWorkbook.ActiveSheet

アクティブなワークシートのA列の最終行番号を変数に格納します。
 r_end = xl_sh.Range("A1").End(-4121).Row '-4121 = xlDown

Range("A1").End(xlDown).Rowというのは、Excel VBAで、A列の最終行番号を取得する定番のオブジェクト式ですが、今回は参照設定をしていない、定数・xlDownを使えないことを想定して、リテラル「-4121」をEndプロパティの引数に指定しています。

Excelのデータごとにスライドを作成するPowerPointマクロ

アクティブなシート名とデータ件数と共に確認メッセージを表示し[いいえ]ボタンが押されたときには、END_TASKまで飛んで終了します。
 msg = "『" & xl_sh.Name & "』シートから、" & r_end & "枚のスライドを作成しますか?"
 If MsgBox(msg, vbYesNo) = vbNo Then GoTo END_TASK

[はい]ボタンがクリックされたときに、スライド作成の処理を開始します。

アクティブなプレゼンテーションファイルの、スライドの枚数を取得し、
 With ActivePresentation.Slides
  i = .Count

Excelのデータ分だけループを回します。
  For r = 1 To r_end

スライドの枚数をインクリメントして、
   i = i + 1

最後尾にppLayoutTableタイプのスライドを挿入します。前回ご紹介した参照設定なしのExcelマクロの場合は、定数・ppLayoutTableが使えませんでしたが、今回はPowerPointマクロですからPowerPoint VBAの定数を使って指定ができます。
   .Add _
    Index:=i, _
    Layout:=ppLayoutTable

その挿入したスライドに1行3列の表を挿入して、
   With .Item(i)
    .Shapes.AddTable _
     NumRows:=1, _
     NumColumns:=3

その挿入した表にExcelのデータを流し込みます。
    With .Shapes(2).Table
     For c = 1 To 3
      .Cell(1, c).Shape.TextFrame.TextRange = _
       xl_sh.Cells(r, c).Text

関連語句
VBA, Visual Basic for Applications
[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » Excelのデータごとにスライドを作成するPowerPointマクロ

「Slide・スライド」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.