この記事でできること
VBAでExcelのデータを読み取って、PowerPointスライドを自動生成できるようになる。表やグラフの貼り付けも、複数スライドの一括生成も対応。
- 対象:ExcelからPowerPointへの転記を毎回手作業でやっている人、VBAが初めての人
- 所要時間:コピペ → 実行まで約5分(基本版)
対象: Excel 2016以降 / Microsoft 365、Windows 10/11
必要: PowerPoint(デスクトップ版)インストール済み
どんな場面で使う?
- 月次報告の資料作成 — 毎月の売上・実績データをExcelで集計し、報告用PowerPointを作っている。拠点別・商品別でスライドが10〜60枚になり、1枚ずつ手作業で転記すると丸1日潰れる
- 顧客別の提案書・見積書の量産 — 顧客リスト(Excel)の会社名・金額・条件を、提案書テンプレート(PPT)に差し込んで顧客ごとにカスタマイズ。週3〜5本の手作業が限界
- 品質報告・検査レポートの作成 — 検査データ(Excel)と検査写真をPowerPointに貼り付けて報告書にする。表とグラフの位置合わせが毎回地獄
- 研修資料・修了証の個別作成 — 受講者リスト(Excel)から、名前や成績を差し込んだ個別スライドを人数分作る
- 経営会議・役員報告の資料集約 — 各部門からExcelで上がってきた報告を1つのPowerPointにまとめる。数字の転記ミスが怖い
—
完成イメージ(Before / After)
Before(手動コピペ):
- Excelの集計データを確認する
- PowerPointを開いて新しいスライドを作成する
- タイトル・本文を手入力する
- Excelの表をコピーしてスライドに貼り付ける
- グラフもコピーして貼り付ける
- 位置やサイズを手動で調整する
- 次のスライドで同じ作業を繰り返す
- 10枚のスライドで30分以上かかる
After(VBAで自動生成):
- マクロを実行(またはボタンをクリック)
- ExcelのデータからPowerPointスライドが自動生成される
- 表やグラフも指定位置・指定サイズで自動配置される
- 10枚のスライドが5秒で完成。位置ズレなし
—
自分も以前、毎月20拠点分の売上報告PowerPointを手作業で作っていた。1拠点あたりスライド3枚、合計60枚。Excelの数字をPPTに手入力して、表をコピペして、グラフを貼り付けて、位置を微調整して。これだけで毎月丸1日が消えていた。正直、月末が来るたびに憂鬱だった。
しかも一度、売上の桁を1つ間違えたまま経営会議に出してしまったことがある。「この数字、本当に合ってる?」と役員に指摘されたときは冷や汗が止まらなかった。それ以来、転記後のダブルチェックに30分追加。合計で1日半かかるようになった。
「ExcelとPowerPointは別アプリだからVBAで連携できないんじゃないか」と思っていたが、CreateObject を使えば参照設定すら不要で、Excelの標準モジュールからPowerPointを丸ごと操作できた。VBAで自動生成するようにしてからは、60枚のスライドが10分で完成。位置もサイズも毎回同じ。転記ミスもゼロ。あの毎月の憂鬱な1日がなくなった。
同じように「ExcelからPPTへの転記が苦行」と感じている人が、この記事で一気にラクになればうれしい。
ExcelからPowerPointスライドを自動生成するコツは「CreateObject(“PowerPoint.Application”) でPowerPointを操作し、Slides.Add でスライドを追加して Shapes にテキストや表を配置する」こと。手動コピペでは再現できない正確な位置・サイズで毎回統一された資料が作れる。
なお、Excelの表をOutlookメール本文に貼り付けたい場合は Excelの表をOutlookメール本文に貼り付けて送る方法 を参照。ExcelのデータをWordに転記したい場合は Excelの表をWordに自動転記する方法 を参照。この記事では「ExcelのデータからPowerPointスライドを自動生成する」に特化する。
—
実行前の準備
PowerPointのインストールを確認する
VBAからPowerPointを操作するには、PowerPointのデスクトップ版がインストールされている必要がある。Web版やストア版では CreateObject("PowerPoint.Application") が動作しない場合がある。Microsoft 365の場合、「アプリのインストール」からデスクトップ版をインストールすること。
バックアップを取る
元データのExcelファイルは、作業前にコピーしてバックアップを取ること。
Excelをマクロ有効ブック(.xlsm)で保存する
- 「ファイル」→「名前を付けて保存」
- ファイルの種類を「Excelマクロ有効ブック (*.xlsm)」に変更
- 保存
.xlsx のままだとマクロが保存されない。必ず .xlsm にすること。
—
手順(コピペ → 実行まで約5分)
VBE(コードを書く画面)を開く
- Excelで
Alt + F11を押す - VBE(Visual Basic Editor)が開く
標準モジュールを挿入する
- VBEのメニュー →「挿入」→「標準モジュール」
- 白い画面(コードウィンドウ)が表示される
コードを貼り付けて実行する
- コードウィンドウに、下のコードをそのままコピペする
- コード内のシート名・保存先パスを自分の環境に書き換える
Alt + F8→ マクロ名を選んで「実行」- PowerPointにスライドが生成されることを確認する
ボタンに割り当てれば毎回Alt+F8を押さなくて済む。方法は マクロをボタン1つで実行する方法 を参照。
—
コード(基本版)– Excelの値からスライドを作成
まずはこれだけで動く。Excelシートのセル値を読み取り、PowerPointにタイトルスライドとコンテンツスライドを自動生成する。
'============================================================
' ■ Excelの値からPowerPointスライドを作成(基本版)
' → PowerPointを起動してスライドを追加
' → Excelのセル値をタイトル・本文に設定
' → .pptx で保存
'============================================================
Sub CreatePptBasic()
'--- ★書き換えポイント ---
Dim savePath As String
savePath = "C:\Output\プレゼン資料.pptx" '← 保存先のパス
Dim sheetName As String
sheetName = "Sheet1" '← データがあるシート名
'--- ★ここまで ---
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(sheetName)
'--- PowerPoint を起動(参照設定不要)
Dim ppApp As Object
Set ppApp = CreateObject("PowerPoint.Application")
ppApp.Visible = True ' PowerPointを表示(確認用)
'--- 新しいプレゼンテーションを作成
Dim ppPres As Object
Set ppPres = ppApp.Presentations.Add
'--- タイトルスライドを追加(レイアウト 1 = タイトルスライド)
Dim ppSlide As Object
Set ppSlide = ppPres.Slides.Add(1, 1)
'--- ★書き換えポイント ---
' タイトルとサブタイトルのセル位置を書き換える
'--- ★ここまで ---
ppSlide.Shapes(1).TextFrame.TextRange.Text = ws.Range("A1").Value ' タイトル
ppSlide.Shapes(2).TextFrame.TextRange.Text = ws.Range("A2").Value ' サブタイトル
'--- コンテンツスライドを追加(レイアウト 2 = タイトルとコンテンツ)
Dim ppSlide2 As Object
Set ppSlide2 = ppPres.Slides.Add(2, 2)
ppSlide2.Shapes(1).TextFrame.TextRange.Text = ws.Range("A4").Value ' タイトル
ppSlide2.Shapes(2).TextFrame.TextRange.Text = ws.Range("A5").Value ' 本文
'--- 保存
ppPres.SaveAs savePath
'--- PowerPoint を終了しない(内容を確認するため)
' 確認後に手動で閉じる
Set ppSlide2 = Nothing
Set ppSlide = Nothing
Set ppPres = Nothing
Set ppApp = Nothing
MsgBox "スライドを作成しました。" & vbCrLf & savePath, vbInformation
End Sub
書き換えポイント
| 変数 / 箇所 | 説明 | 初期値 |
|---|---|---|
savePath |
生成した.pptxの保存先パス | "C:\Output\プレゼン資料.pptx" |
sheetName |
データがあるシート名 | "Sheet1" |
ws.Range("A1") |
タイトルスライドのタイトル | A1セル |
ws.Range("A2") |
タイトルスライドのサブタイトル | A2セル |
ws.Range("A4") |
コンテンツスライドのタイトル | A4セル |
ws.Range("A5") |
コンテンツスライドの本文 | A5セル |
Excelシートのレイアウト例
| セル | 内容 | 例 |
|---|---|---|
| A1 | タイトルスライドのタイトル | 2026年3月 売上報告 |
| A2 | タイトルスライドのサブタイトル | 営業企画部 鈴木 |
| A4 | コンテンツスライドのタイトル | 月次売上推移 |
| A5 | コンテンツスライドの本文 | 3月の売上は前月比120%… |
コードの流れ
CreateObject("PowerPoint.Application")でPowerPointを起動する(参照設定不要)Presentations.Addで新しいプレゼンテーションを作成するSlides.Add(スライド番号, レイアウト番号)でスライドを追加するShapes(番号).TextFrame.TextRange.TextにExcelのセル値を設定するSaveAsで .pptx として保存する
Slides.Add の第2引数(レイアウト番号): 1 はタイトルスライド、2 はタイトルとコンテンツ、12 は白紙。環境やテーマによって番号が異なる場合がある。まずはこの3つを覚えておけば十分。
—
コード(応用版)– 表やグラフをスライドに貼り付け
Excelの表(セル範囲)やグラフをスライドに貼り付ける版。位置とサイズを指定するので、毎回同じレイアウトで配置される。
'============================================================
' ■ Excelの表・グラフをPowerPointスライドに貼り付け(応用版)
' → 表(セル範囲)を画像としてスライドに貼り付け
' → グラフを画像としてスライドに貼り付け
' → 位置・サイズを指定して正確に配置
'============================================================
Sub CreatePptWithTableAndChart()
'--- ★書き換えポイント ---
Dim savePath As String
savePath = "C:\Output\売上報告.pptx" '← 保存先のパス
Dim sheetName As String
sheetName = "Sheet1" '← データがあるシート名
Dim tableRange As String
tableRange = "A1:D6" '← 貼り付ける表の範囲
'--- ★ここまで ---
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(sheetName)
'--- PowerPoint を起動
Dim ppApp As Object
Set ppApp = CreateObject("PowerPoint.Application")
ppApp.Visible = True
Dim ppPres As Object
Set ppPres = ppApp.Presentations.Add
'=== スライド1: タイトル ===
Dim ppSlide1 As Object
Set ppSlide1 = ppPres.Slides.Add(1, 1) ' タイトルスライド
ppSlide1.Shapes(1).TextFrame.TextRange.Text = "売上報告"
ppSlide1.Shapes(2).TextFrame.TextRange.Text = Format(Date, "yyyy年m月")
'=== スライド2: 表を貼り付け ===
Dim ppSlide2 As Object
Set ppSlide2 = ppPres.Slides.Add(2, 12) ' 白紙スライド
'--- タイトルをテキストボックスで追加
Dim titleShape As Object
Set titleShape = ppSlide2.Shapes.AddTextbox( _
Orientation:=1, _
Left:=30, Top:=20, Width:=660, Height:=40)
titleShape.TextFrame.TextRange.Text = "売上一覧表"
titleShape.TextFrame.TextRange.Font.Size = 24
titleShape.TextFrame.TextRange.Font.Bold = True
'--- Excelの表をコピーしてスライドに貼り付け
ws.Range(tableRange).Copy
DoEvents ' コピー完了を待つ
ppSlide2.Shapes.PasteSpecial DataType:=2 ' 2 = 拡張メタファイル
Application.CutCopyMode = False
'--- 貼り付けた表の位置とサイズを調整
Dim tblShape As Object
Set tblShape = ppSlide2.Shapes(ppSlide2.Shapes.Count)
tblShape.Left = 50
tblShape.Top = 80
tblShape.Width = 620
tblShape.Height = 380
'=== スライド3: グラフを貼り付け ===
If ws.ChartObjects.Count > 0 Then
Dim ppSlide3 As Object
Set ppSlide3 = ppPres.Slides.Add(3, 12) ' 白紙スライド
'--- タイトルをテキストボックスで追加
Dim chartTitle As Object
Set chartTitle = ppSlide3.Shapes.AddTextbox( _
Orientation:=1, _
Left:=30, Top:=20, Width:=660, Height:=40)
chartTitle.TextFrame.TextRange.Text = "売上推移グラフ"
chartTitle.TextFrame.TextRange.Font.Size = 24
chartTitle.TextFrame.TextRange.Font.Bold = True
'--- Excelのグラフをコピーしてスライドに貼り付け
ws.ChartObjects(1).Chart.CopyPicture xlScreen, xlPicture
DoEvents
ppSlide3.Shapes.Paste
'--- 貼り付けたグラフの位置とサイズを調整
Dim chtShape As Object
Set chtShape = ppSlide3.Shapes(ppSlide3.Shapes.Count)
chtShape.Left = 50
chtShape.Top = 80
chtShape.Width = 620
chtShape.Height = 380
End If
'--- 保存
ppPres.SaveAs savePath
Set ppPres = Nothing
Set ppApp = Nothing
MsgBox "表・グラフ付きスライドを作成しました。" & vbCrLf & savePath, vbInformation
End Sub
書き換えポイント
| 変数 / 箇所 | 説明 | 初期値 |
|---|---|---|
savePath |
生成した.pptxの保存先パス | "C:\Output\売上報告.pptx" |
sheetName |
データがあるシート名 | "Sheet1" |
tableRange |
スライドに貼り付ける表の範囲 | "A1:D6" |
ChartObjects(1) |
貼り付けるグラフの番号 | 1番目のグラフ |
コードの流れ
- タイトルスライドを作成する
- 白紙スライドを追加し、テキストボックスでタイトルを配置する
ws.Range(範囲).Copy→ppSlide.Shapes.PasteSpecialで表を貼り付けるLeft,Top,Width,Heightで位置とサイズを調整するChartObjects(1).Chart.CopyPicture→ppSlide.Shapes.Pasteでグラフを貼り付ける
PasteSpecial の DataType: 2(拡張メタファイル)を指定すると高画質で貼り付けられる。0(デフォルト)だと編集可能なオブジェクトとして貼り付くが、ファイルサイズが大きくなることがある。
—
コード(実務版)– 一覧表から複数スライドを一括生成
実務では一覧データから複数のスライドを一括生成する場面がある。各行のデータをスライドのタイトル・本文に展開し、1つのプレゼンテーションとして保存する版。エラーハンドリング付き。
一覧シート(「スライド一覧」シート)のレイアウト:
| A列 | B列 | C列 | D列 |
|---|---|---|---|
| スライドタイトル | 本文 | 備考 | ステータス |
| 1月の売上報告 | 売上合計: 1,200万円。前月比115%で推移。 | グラフ追加予定 | |
| 2月の売上報告 | 売上合計: 1,350万円。前月比112%で推移。 | ||
| 3月の売上報告 | 売上合計: 1,500万円。前月比111%で推移。 |
'============================================================
' ■ 一覧データからPowerPointスライドを一括生成(実務版)
' → 一覧シートの各行をスライドに展開
' → タイトル+本文のスライドを行数分生成
' → ステータス列にログ記録
' → エラーハンドリング + ppApp.Quit 確実実行
'============================================================
Sub CreatePptBatch()
'--- ★書き換えポイント ---
Dim savePath As String
savePath = "C:\Output\月次報告.pptx" '← 保存先のパス
Dim listSheet As String
listSheet = "スライド一覧" '← 一覧データのシート名
Dim presTitle As String
presTitle = "月次売上報告" '← タイトルスライドのタイトル
Dim presSubTitle As String
presSubTitle = "営業企画部" '← タイトルスライドのサブタイトル
'--- ★ここまで ---
'--- 出力先フォルダの存在チェック
Dim outputFolder As String
outputFolder = Left(savePath, InStrRev(savePath, "\"))
If Dir(outputFolder, vbDirectory) = "" Then
MsgBox "出力先フォルダが存在しません。" & vbCrLf & _
outputFolder, vbExclamation
Exit Sub
End If
Dim wsList As Worksheet
Set wsList = ThisWorkbook.Worksheets(listSheet)
Dim lastRow As Long
lastRow = wsList.Cells(wsList.Rows.Count, 1).End(xlUp).Row
If lastRow < 2 Then
MsgBox "一覧データがありません。" & vbCrLf & _
"A2セル以降にデータを入力してください。", vbExclamation
Exit Sub
End If
'--- PowerPoint を起動
Dim ppApp As Object
Set ppApp = CreateObject("PowerPoint.Application")
ppApp.Visible = True
Dim ppPres As Object
Set ppPres = ppApp.Presentations.Add
'--- タイトルスライドを追加
Dim ppTitleSlide As Object
Set ppTitleSlide = ppPres.Slides.Add(1, 1) ' 1 = ppLayoutTitle
ppTitleSlide.Shapes(1).TextFrame.TextRange.Text = presTitle
ppTitleSlide.Shapes(2).TextFrame.TextRange.Text = presSubTitle & vbCrLf & Format(Date, "yyyy年m月d日")
Dim genCount As Long
Dim errCount As Long
genCount = 0
errCount = 0
Dim i As Long
For i = 2 To lastRow
'--- タイトルが空欄ならスキップ
If Trim(wsList.Cells(i, 1).Value) = "" Then
wsList.Cells(i, 4).Value = "スキップ(タイトルなし)"
GoTo NextRow
End If
On Error GoTo ErrHandler
'--- コンテンツスライドを追加(レイアウト 2 = タイトルとコンテンツ)
Dim slideIndex As Long
slideIndex = ppPres.Slides.Count + 1
Dim ppSlide As Object
Set ppSlide = ppPres.Slides.Add(slideIndex, 2)
'--- タイトルを設定
ppSlide.Shapes(1).TextFrame.TextRange.Text = _
wsList.Cells(i, 1).Value ' A列:スライドタイトル
'--- 本文を設定
If Trim(wsList.Cells(i, 2).Value) <> "" Then
ppSlide.Shapes(2).TextFrame.TextRange.Text = _
wsList.Cells(i, 2).Value ' B列:本文
End If
'--- フォント設定(見やすさ統一)
ppSlide.Shapes(1).TextFrame.TextRange.Font.Size = 28
ppSlide.Shapes(1).TextFrame.TextRange.Font.Bold = True
ppSlide.Shapes(2).TextFrame.TextRange.Font.Size = 18
'--- ステータスを記録
wsList.Cells(i, 4).Value = "生成済み"
genCount = genCount + 1
On Error GoTo 0
NextRow:
Next i
'--- 保存
On Error Resume Next
ppPres.SaveAs savePath
On Error GoTo 0
'--- PowerPoint を終了しない(内容を確認するため)
Set ppPres = Nothing
Set ppApp = Nothing
MsgBox genCount & " 枚のスライドを生成しました。" & vbCrLf & _
"エラー:" & errCount & " 件" & vbCrLf & _
"D列にステータスを記録しました。" & vbCrLf & vbCrLf & _
"保存先:" & savePath, vbInformation, "完了"
Exit Sub
ErrHandler:
wsList.Cells(i, 4).Value = "エラー:" & Err.Description
errCount = errCount + 1
On Error GoTo 0
Resume NextRow
End Sub
書き換えポイント
| 変数 / 箇所 | 説明 | 初期値 |
|---|---|---|
savePath |
生成した.pptxの保存先パス | "C:\Output\月次報告.pptx" |
listSheet |
一覧データのシート名 | "スライド一覧" |
presTitle |
タイトルスライドのタイトル | "月次売上報告" |
presSubTitle |
タイトルスライドのサブタイトル | "営業企画部" |
一覧シートの列構成
| 列 | 内容 | 必須 |
|---|---|---|
| A列 | スライドタイトル | 必須 |
| B列 | 本文 | 任意(空欄時は空のスライド) |
| C列 | 備考(マクロでは使用しない) | 任意 |
| D列 | ステータス(自動記録) | 自動 |
コードの流れ
- 事前チェック: 出力先フォルダの存在と一覧データの有無を確認
- PowerPointを起動:
CreateObject("PowerPoint.Application")で起動 - タイトルスライド作成: プレゼンテーション全体のタイトルとサブタイトルを設定
- 一覧をループ: 2行目から最終行まで、行ごとにスライドを追加
- テキスト設定: A列のタイトルとB列の本文をスライドに設定
- フォント統一: フォントサイズ・太字を統一設定
- ステータス記録: D列に「生成済み」「スキップ」「エラー」を記録
- 保存:
SaveAsで .pptx として保存
PowerPointを閉じない設計: 実務版では生成後にPowerPointを開いたままにしている。内容を確認してから手動で閉じる運用を想定。バックグラウンドで処理して自動終了したい場合は
ppApp.Visible = Falseに変更し、SaveAs の後にppPres.Close→ppApp.Quitを追加する。
エラーハンドリングの仕組みは エラー処理で止まらないマクロを作る方法 を参照。ボタンに割り当てれば毎回Alt+F8を押さなくて済む。方法は マクロをボタン1つで実行する方法 を参照。
—
よくある落とし穴5選
1. Quit忘れでPOWERPNT.EXEが残留する
自分もこれで失敗した。エラーが起きてマクロが途中で止まり、ppApp.Quit が実行されなかった。タスクマネージャーを開いたらPOWERPNT.EXEが大量に残っていた。PCが重くなった原因がこれだった。
対策: バックグラウンド処理する場合は、エラー発生時も必ず ppApp.Quit が実行されるよう、On Error でクリーンアップ処理を入れる。この記事の実務版コードではPowerPointを開いたまま確認する設計にしているが、自動終了する場合は ErrHandler 内で ppApp.Quit を忘れないこと。
2. スライドレイアウトの番号が環境によって異なる
自分もレイアウト番号を間違えて、意図しないレイアウトのスライドが生成されたことがある。Slides.Add の第2引数はレイアウト番号だが、テーマやバージョンによって番号が変わることがある。
対策: よく使うレイアウトは 1(タイトル)、2(タイトルとコンテンツ)、12(白紙)の3つ。これらは環境が変わっても概ね同じ。それでもズレる場合は ppPres.SlideMaster.CustomLayouts で利用可能なレイアウトを確認する。
3. ActiveXコンポーネントエラー429
原因: CreateObject("PowerPoint.Application") はPowerPointのデスクトップ版が必要。Web版やストア版では動作しない場合がある。
対策: PowerPointのデスクトップアプリがインストールされていることを確認する。Microsoft 365の場合、「アプリのインストール」からデスクトップ版をインストールする。
4. 貼り付けた表やグラフの位置・サイズがズレる
原因: Shapes.Paste や Shapes.PasteSpecial で貼り付けた直後は、位置やサイズが指定されていない。
対策: 貼り付け後に Left, Top, Width, Height プロパティで明示的に位置とサイズを指定する。応用版コードではこの調整を入れている。
5. グラフの画質が粗い
自分もグラフを貼り付けたら画質が粗くなったことがある。CopyPictureのFormat引数を指定していなかった。
対策: CopyPicture xlScreen, xlPicture で拡張メタファイル形式を指定する。ビットマップ(xlBitmap)よりも高画質で貼り付けられる。
VBAでExcelからPowerPointに表が貼り付けられないときの対処法
「Shapes.PasteSpecial を実行すると『クリップボードにデータがありません』というエラーが出る」という場合、原因は Range.Copy の直後に DoEvents を入れていないことが多い。ExcelからPowerPointへのアプリ間コピペは、Excelのコピー処理が完了する前にPowerPoint側のPasteが実行されてしまうタイミング問題が起きやすい。対処法は、ws.Range(範囲).Copy の直後に DoEvents を1行入れること。これでExcelのコピーが完了してからPasteが実行される。自分も最初これを入れずに「5回に1回くらいエラーになる」という不安定な挙動に悩まされた。DoEventsを入れてからは一度もエラーが出ていない。
VBAで生成したPowerPointのレイアウトが崩れるときの対処法
「スライドを生成したらフォントや配置が意図したものと違う」という場合、原因は Slides.Add の第2引数(レイアウト番号)が環境やテーマによって異なることだ。たとえばレイアウト番号 2(タイトルとコンテンツ)が、会社のテンプレートでは別のレイアウトに割り当てられている場合がある。対処法は、まず白紙スライド(レイアウト 12)で追加し、テキストボックスやオブジェクトを Shapes.AddTextbox で自分で配置すること。テンプレートに依存しないので、どの環境でもレイアウトが崩れない。応用版コードではこの方法を採用している。
VBAでPowerPointのテンプレートにデータを差し込む方法がわからないときの対処法
「会社指定のPPTテンプレートがあるのに、新規プレゼンテーションでしかスライドが作れない」という場合、Presentations.Add の代わりに Presentations.Open("テンプレート.pptx") を使えばよい。既存テンプレートを開いてからスライドを追加すれば、会社のデザイン・マスタースライド・フォント設定がすべて引き継がれる。自分はこの方法を覚えてから、上司に「テンプレートに沿っていない」と指摘されることがなくなった。パスの指定は ファイルやフォルダの存在を確認してから処理する方法 の Dir チェックと組み合わせると安全だ。
—
FAQ
Q1: 既存のPowerPointテンプレート(.pptx)を使いたい
ppApp.Presentations.Open("C:\Template\テンプレート.pptx") でテンプレートを開き、Slides.Add でスライドを追加する。既存のデザインやマスタースライドをそのまま活用できる。
Q2: フォントやフォントサイズを変えたい
ppSlide.Shapes(1).TextFrame.TextRange.Font.Name = "メイリオ" でフォント名、.Font.Size = 24 でサイズ、.Font.Bold = True で太字を設定できる。実務版コードではフォントサイズの統一設定を入れている。
Q3: 生成したPowerPointをPDFで保存したい
ppPres.ExportAsFixedFormat savePath, 2 で保存できる(2 = ppFixedFormatTypePDF)。ExcelファイルのPDF変換は ExcelファイルをPDFに一括変換 も参考になる。
Q4: スライドに画像ファイルを挿入したい
ppSlide.Shapes.AddPicture "C:\画像\photo.jpg", False, True, Left, Top, Width, Height で画像を挿入できる。Left/Top で位置、Width/Height でサイズを指定する。
Q5: 1つのExcelファイルから複数のプレゼンテーション(.pptx)を作りたい
実務版コードをベースに、行ごとに Presentations.Add → スライド追加 → SaveAs → Close のループに変更する。ファイル名はセル値から取得すればよい。
—
まとめ
CreateObject("PowerPoint.Application")で参照設定不要。コピペで動くSlides.Add(番号, レイアウト)でスライドを追加し、Shapes.TextFrame.TextRange.Textでテキストを設定できる(基本版)Range.Copy→Shapes.PasteSpecialで表を、CopyPicture→Shapes.Pasteでグラフをスライドに貼り付けられる(応用版)- 一覧データをループして複数スライドを一括生成できる(実務版)
関連記事
- Excelの表をOutlookメール本文に貼り付けて送る方法 — 表をメール本文に貼り付けたい場合
- Excelの表をWordに自動転記する方法 — ExcelデータをWord文書に転記したい場合
- ExcelファイルをPDFに一括変換 — PDF変換と組み合わせる場合
—
次にやりたくなること
- Excelの表をWordに自動転記する方法: PowerPointではなくWord報告書に転記したい場合
- Excelの表をOutlookメール本文に貼り付けて送る方法: 生成した資料の内容をメール本文に載せたい場合
- ExcelファイルをPDFに一括変換する方法: 生成したPPTをPDFに変換して共有したい場合
- マクロの実行ログをファイルに自動記録する方法: 何枚のスライドを生成したかログに残したい場合
- ブックの保存・閉じる操作を自動化する方法: スライド生成後にExcelも自動保存して閉じたい場合
—
60枚のスライドが10分で完成すると、資料作成は「作業」から「内容の確認だけ」に変わる。しかも転記ミスがゼロになるので、ダブルチェックの時間もなくなる。自分はこのマクロを作ってから、毎月の月末報告が「憂鬱な1日」から「10分で終わるルーティン」に変わった。まずは基本版で「ExcelのデータがPowerPointに自動で入る」感覚を体験してみてほしい。一度動くのを見たら、もう手作業には戻れなくなるはずだ。


コメント