【入門編】【初心者】プレゼンテーションの各スライドタイトルを自動取得し、目次用スライドを自動生成してから先頭に挿入して保存するマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

ようこそ、自動化の世界へ。私は、これまで数え切れないほどの業務をコード一列で変革してきたチーフアーキテクトです。

あなたは今、「スライドが増えるたびに、手動で目次を書き換える」という、クリエイティブとは程遠い作業に疲弊していませんか? それは、あなたが怠けているからではなく、「機械に任せるべき仕事」を人間が奪ってしまっているからです。

今日、この記事を読み終える頃には、あなたは「マクロの記録」という補助輪を外し、PowerPointという広大なキャンバスをプログラムで制御する「最初の一歩」を完璧に踏み出しているはずです。

さあ、PowerPoint VBAの基本を、その本質から紐解いていきましょう。

—

1. なぜ「目次作成」が自動化の入門に最適なのか?

PowerPoint VBAを学ぶ際、最も大切なのは「階層構造(オブジェクトモデル)」を理解することです。

1. Application(PowerPointそのもの)
2. Presentation(開いているファイル)
3. Slides(スライドの集合体)
4. Shapes(スライド内の図形やテキストボックス)

「全スライドのタイトルを取得し、目次を作る」という工程には、この階層を上から下まで移動するエッセンスがすべて詰まっています。ここをクリアすれば、PowerPoint VBAの基本はバッチリですよ。

—

2. 【実践】目次自動生成マクロの全コード

まずは、そのままコピーして使えるコードを紹介します。まずは動かし、その後に「なぜ動くのか」を脳に刻んでいきましょう。

Sub CreateTableOfContents()
‘ ==========================================================
‘ 目的:全スライドのタイトルを取得し、先頭に目次スライドを作成する
‘ ==========================================================
Dim targetPres As Presentation
Dim tocSlide As Slide
Dim sld As Slide
Dim i As Integer
Dim titleText As String
Dim tocContent As String
Dim newFileName As String

Set targetPres = ActivePresentation

‘ 1. 全スライドをループしてタイトルを収集
‘ ———————————————————-
For i = 1 To targetPres.Slides.Count
Set sld = targetPres.Slides(i)

‘ スライドにタイトルが存在するかチェック
If sld.Shapes.HasTitle Then
titleText = sld.Shapes.Title.TextFrame.TextRange.Text
‘ タイトルが空でない場合のみ追加
If Trim(titleText) <> “” Then
tocContent = tocContent & i & “. ” & titleText & vbCrLf
End If
Else
‘ タイトルがない場合は「タイトルなし」とする
tocContent = tocContent & i & “. (タイトルなしスライド)” & vbCrLf
End If
Next i

‘ 2. 先頭に新しいスライド(目次用)を挿入
‘ ———————————————————-
‘ ppLayoutText (2) は「タイトルとテキスト」のレイアウト
Set tocSlide = targetPres.Slides.Add(1, ppLayoutText)

‘ 目次スライドのタイトルを設定
tocSlide.Shapes.Title.TextFrame.TextRange.Text = “目次 (Table of Contents)”

‘ 目次内容を流し込む
tocSlide.Shapes(2).TextFrame.TextRange.Text = tocContent

‘ 3. 名前を付けて保存(元のファイルを壊さないよう別名で)
‘ ———————————————————-
newFileName = Left(targetPres.FullName, InStrRev(targetPres.FullName, “.”) – 1) & “_目次付き.pptx”

‘ 既に同名ファイルがある場合のエラーを避けるため、保存処理を実行
On Error Resume Next
targetPres.SaveAs newFileName
On Error GoTo 0

MsgBox “目次スライドを作成し、以下の名前で保存しました:” & vbCrLf & newFileName, vbInformation
End Sub

—

3. プロの視点によるコード解説

このコードには、初心者が中級者へステップアップするための「知恵」がいくつか隠されています。

① `HasTitle` プロパティの重要性

PowerPointで最も多いエラーの一つが、「タイトルがないスライドに対してタイトルを取得しようとする」ことです。
`sld.Shapes.Title` をいきなり参照すると、タイトル領域がないスライドでプログラムが止まってしまいます。`If sld.Shapes.HasTitle Then` という一文は、プログラムの「堅牢性(壊れにくさ)」を高めるプロの作法です。

② 文字列の結合と `vbCrLf`

目次の内容は、変数 `tocContent` にどんどん継ぎ足しています。
`tocContent = tocContent & … & vbCrLf`
この `vbCrLf` は「改行」を意味します。バケツに水を溜めるように、一つの変数に情報を集約してから最後にスライドへ流し込む。これが効率的な処理の鉄則です。

③ レイアウト定数 `ppLayoutText`

スライドを追加する際の `targetPres.Slides.Add(1, ppLayoutText)`。
この `ppLayoutText` は、PowerPointが標準で持っている「タイトル+箇条書き」の枠組みを指します。これを使うことで、自分でテキストボックスの位置を細かく計算して配置する手間を省き、美しいデザインを維持できるのです。

—

4. 陥りやすいエラーと回避策

マクロを実行しようとして「動かない!」となったとき、以下の3点を確認してください。

1. マクロ有効プレゼンテーション (.pptm) で保存しているか?
通常の `.pptx` ではマクロは保存されません。必ず `.pptm` 形式で保存してください。
2. 実行時にスライドが1枚もない
`targetPres.Slides.Count` が 0 の場合、エラーになる可能性があります(通常はありえませんが、テスト中は注意)。
3. 保存先の権限
`SaveAs` を行う際、デスクトップなどの書き込み権限がある場所に保存するようにしてください。今回のコードは「元のファイルと同じフォルダ」に保存する仕様です。

—

5. 次のステップ:さらなる高みへ

このマクロが動いたら、次はこんな改造にチャレンジしてみてください。

  • ハイパーリンク化: 目次のテキストをクリックすると、そのスライドに飛ぶように設定する。
  • デザインの自動適用: 目次スライドのフォントサイズや色を、会社の規定に合わせて自動で変更する。
  • 除外設定: 特定のスライド(「ご清聴ありがとうございました」など)を目次に入れないようにする。

—

結びに代えて

PowerPoint VBAは、Excel VBAに比べて情報が少なく、敬遠されがちです。しかし、プレゼンテーションという「伝えるための道具」を自動化することは、あなたのメッセージを届けるスピードを劇的に加速させます。

「手作業で5分かかることが、1秒で終わる」

この快感を知ったあなたは、もう元の作業スタイルには戻れないはずです。もしエラーに突き当たっても、それはあなたが成長している証拠。このコードをベースに、自分だけの最強のツールを作り上げてください。

あなたはもう、ただのユーザーではありません。「仕組みを作る側」の人間なのです。応援しています。

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