【入門編】【中級者】プレゼンテーションの各セクション名とスライド番号の対応表を自動生成し、表紙の次に「目次ページ」として自動挿入して上書き保存するマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!パワポの定型作業に毎度うんざりしていませんか?「スライドを追加したら目次のページ番号が全部ずれた……手動で直すの面倒くさい!」――そんな現場の悲鳴を、たった1クリックで完全に解決する魔法のコードをお届けします。

マクロの記録から一歩抜け出し、PowerPointのオブジェクトモデルを自在に操る「中級者への扉」を一緒に叩いてみましょう。ここをクリアすれば、あなたのVBAスキルは確実に一段上のステージへ到達しますよ。

—

なぜ「セクションと目次」の自動化が必要なのか?

実務で使うプレゼン資料ほど、構成の変更がつきものです。「あ、ここに新しいセクションを追加しよう」「このスライドは後ろへ移動させよう」となった瞬間、地獄のページ番号ズレ修正大会が幕を開けます。

手作業でやると、以下の問題が発生します。

  • 修正漏れによる、スライドと目次の不一致
  • 膨大なスライド数に対する無駄な工数

今回作成するマクロは、「現在のセクション構成」と「各セクションの先頭スライド番号」を自動でスキャンし、表紙の直下に美しい目次スライドを自動生成(または上書き更新)するというものです。

—

押さえておくべきパワポVBAの3大ポイント

コードを書き始める前に、今回の肝となるPowerPointの構造を頭に入れておきましょう。Excelとは一味違う、パワポ独自のルールがあります。

1. `SectionProperties` の存在
PowerPoint 2010以降、スライドを束ねる「セクション」という概念が導入されました。これをコードから制御するのが `Slide.Congregations` や `Presentation.SectionProperties` です。
2. インデックスの1始まりと型安全性
コレクションの多くは `1` から始まります。また、変数の型を明確に宣言(`Dim`)することで、実行時エラーを防ぐ堅牢なコードになります。
3. 図形(Shape)の動的生成
目次ページに表やテキストボックスを配置する際、既存の目次があれば削除し、常に最新の情報を描画する「クリーン&ビルド」の思想が重要です。

—

実装コード:セクション目次自動生成マクロ

以下のコードを、PowerPointのVBAエディタ(`Alt + F11` → `挿入` → `標準モジュール`)に貼り付けてください。

Option Explicit

‘ ==============================================================================
‘ 処理名: プレゼンテーションセクション目次の自動生成・更新マクロ
‘ 概要: セクション名とスライド番号を自動取得し、表紙の次に目次を挿入して上書き保存する
‘ ==============================================================================
Sub GenerateSectionIndex()

Dim pptPres As Presentation
Set pptPres = ActivePresentation

‘ 1. 安全装置: スライドが少なすぎる場合は処理中断
If pptPres.Slides.Count < 2 Then MsgBox "スライドが少なすぎます。目次を作成するには最低2枚以上必要です。", vbExclamation, "処理中断" Exit Sub End If Dim secProp As SectionProperties Set secProp = pptPres.SectionProperties ' セクション機能が有効かチェック On Error GoTo ErrHandler Dim secCount As Long secCount = secProp.Count On Error GoTo 0 If secCount = 0 Then MsgBox "このプレゼンテーションにはセクションが設定されていません。", vbExclamation, "処理中断" Exit Sub End If ' 2. 既存の目次スライド(2枚目)のクリーンアップ ' ※ルールとして「2枚目を目次専用スライド」と定めている前提です If pptPres.Slides.Count >= 2 Then
If pptPres.Slides(2).Shapes.HasTitle Then
If pptPres.Slides(2).Shapes.Title.TextFrame.TextRange.Text = “目次” Then
pptPres.Slides(2).Delete
End If
End If
End If

‘ 3. 表紙(1枚目)の次に新しい目次スライドを挿入 (レイアウト: 白紙またはタイトルのみ)
Dim indexSlide As Slide
Set indexSlide = pptPres.Slides.Add(2, ppLayoutTitleOnly)
indexSlide.Shapes.Title.TextFrame.TextRange.Text = “目次”

‘ 4. 各セクションの情報をスキャンし、目次テキストを組み立てる
Dim i As Long
Dim secName As String
Dim firstSlideIdx As Long
Dim indexText As String
indexText = “”

For i = 1 To secCount
secName = secProp.Name(i)
firstSlideIdx = secProp.FirstSlide(i)

‘ 最初の表紙セクション、あるいは目次スライド自体が巻き込まれる場合の除外処理など
‘ ここではシンプルにすべてのセクションと開始スライドを紐づけ
indexText = indexText & “・ ” & secName & ” ―――― 第 ” & firstSlideIdx & ” スライド” & vbCrLf
Next i

‘ 5. 目次スライドにテキストボックスを配置して流し込む
Dim idxTextBox As Shape
Set idxTextBox = indexSlide.Shapes.AddTextbox(msoTextOrientationHorizontal, 100, 150, 600, 350)

With idxTextBox.TextFrame
.TextRange.Text = indexText
.TextRange.Font.Name = “Meiryo UI”
.TextRange.Font.Size = 20
.TextRange.Font.Color.RGB = RGB(50, 50, 50)
End With

‘ 6. 上書き保存を実行
pptPres.Save

MsgBox “目次スライドの自動生成と上書き保存が完了しました!”, vbInformation, “成功”
Exit Sub

ErrHandler:
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & Err.Description, vbCritical, “エラー”

End Sub

—

コードの解説:ここがエンジニアのこだわりポイント

初心者から一歩抜け出すために、このコードの重要なテクニックを解説します。

1. 既存目次の「自動削除&再生成」

プログラムが実行されるたびに目次が増殖してしまっては困りますよね。そこで、「2枚目のタイトルの文字列が『目次』だったら一度削除する」というロジックを組んでいます。これにより、何度マクロを走らせても常に最新の1枚だけが綺麗に維持されます。

2. `SectionProperties` による動的取得

ハードコーディング(「3ページ目は〇〇セクション」と決め打ちすること)はバグの元です。`secProp.Name(i)` と `secProp.FirstSlide(i)` を組み合わせることで、セクションが追加・削除されても、常に正確なスライド番号を自動計算してくれます。

3. 安全装置(エラーハンドリング)

「セクションが一つも切られていない資料」や「スライドが1枚しかない資料」でマクロを動かすと、当然エラーになります。処理の最初に `If` 文でガードをかけることで、ユーザーに優しい設計にしています。

—

陥りやすい罠とエラー対策

現場でこのマクロを運用する際によくあるつまずきポイントです。

  • Q. 「セクションが設定されていません」と怒られる
  • A. PowerPointの左側サムネイル一覧で、スライドとスライドの隙間を右クリックし、「セクションの追加」をあらかじめ行ってからマクロを実行してください。
  • Q. ページ番号が目次の分だけずれてしまう気がする…
  • A. このスクリプトは「表紙(1枚目)」の直下に「目次(2枚目)」を挿入するため、3枚目以降のセクション開始スライド番号は自動的に「目次が入った後のインデックス」を正確に返してくれます。パワポのAPI(`FirstSlide`プロパティ)が優秀なため、手動で計算し直す必要はありません。

—

まとめ:自動化の第一歩は「仕組みの理解」から

今回は、プレゼンテーションのセクション構造を読み解き、目次を自動生成して上書き保存する実用スクリプトをご紹介しました。

ここをクリアでき次は、「社内規定のデザインテンプレートへの一括変換」や「PDF形式での自動書き出し」など、さらなる自動化の荒野へと進むことができます。

手を動かしてコードをカスタマイズし、退屈な定型作業をロボットに押し付けて、あなたしか生み出せないクリエイティブな仕事に集中しましょう!ここをクリアできれば、PowerPoint VBAの基本はバッチリですよ。

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