Excelのデータ1件ごとにPowerPointのスライドを作成する、Excelマクロをご紹介しました。
同じことを、PowerPointマクロで行うことも可能です。
Excelのデータごとにスライドを作成するサンプルマクロ
仕様は、前回ご紹介した、Excelマクロと同じです。
フィールドは3列で、1行目からデータが入っていて、データ1件ごと・1レコードごとに、PowerPointのスライド1枚ごとに、1行3列の表の形にします。
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
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プロパティの引数に指定しています。
アクティブなシート名とデータ件数と共に確認メッセージを表示し[いいえ]ボタンが押されたときには、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
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » Excelのデータごとにスライドを作成するPowerPointマクロ