こんにちは!PowerPointの自動化の世界へようこそ。
大規模なプレゼンテーション資料を作っているとき、こんな絶望感を味わったことはありませんか?
「全80ページの資料なのに、どこにどの話題があるか分からない…」
「スライドの順番を入れ替えたら、構成がめちゃくちゃになって手動で整理し直すのに小一時間かかった…」
マクロの記録ボタンをポチッと押すだけでは絶対にたどり着けない領域、それが「セクション機能のAPIハック」です。
今回は、PowerPoint VBAの隠れた(そして極めて強力な)オブジェクモデルである `SectionProperties` を使いこなし、混沌としたスライドの海を美しく構造化するプロフェッショナルな手法を伝授します。ここをクリアすれば、あなたのPowerPoint VBAのスキルは間違いなく中級者の域を突破しますよ。それじゃあ、一緒に見ていきましょう!
—
1. なぜ「セクション」をVBAで操る必要があるのか?
PowerPointの画面左側にあるサムネイル一覧、あそこで右クリックすると「セクションの追加」ができますよね。あれをVBAから完全にコントロールするのが今回のテーマです。
手動でセクションを管理すると、以下の問題が発生します。
- スライドを追加・削除するたびに、セクションのインデックス番号がズレる
- 数十枚単位の資料で名前付けが面倒くさい・ヒューマンエラーが起きる
これをVBAで自動化できれば、「データのリストから一瞬で構造化されたプレゼン資料を自動生成する」といった神業的な自動化が可能になります。
—
2. セクション操作の核心:`SectionProperties` とは?
PowerPointのオブジェクトモデルにおいて、セクションは `Presentation` オブジェクトの直下にぶら下がっています。
- `ActivePresentation.SectionProperties`
これがセクションを支配するための「司令塔」です。この司令塔が持つ主なメソッドを頭に入れておきましょう。
| メソッド / プロパティ | やること |
| :— | :— |
| `AddSection(Index, Name)` | 指定したスライド位置に新しいセクションを作成する |
| `RenameSection(Index, Name)` | セクションの名前を変更する |
| `Move(SourceIndex, TargetIndex)` | セクションをごっそり別の場所に移動する |
| `Count` | セクションの総数を取得する |
※注意:ここで言う `Index` とは、スライド番号ではなく「セクション自体の順番(上から何番目か)」を指すのがポイントです。ここを勘違いすると、VBA職人としての第一歩で躓くので要注意ですよ!
—
3. 実践:セクションを自動生成・整理するマクロ
それでは、実際に動くコードを見てみましょう。
このコードは、現在のプレゼンテーションにあるすべてのセクションを一旦きれいさっぱり削除し、スライドの枚数や条件に応じて、新しくセクションを美しく再構築するスクリプトです。
VBE(Visual Basic Editor)を開き、標準モジュールに以下のコードを貼り付けてみてください。
Sub AutoOrganizeSections()
‘ —————————————————-
‘ 目的: プレゼンテーション内のセクションを初期化し、
‘ ルールに従って自動的にセクションを再構築する
‘ —————————————————-
Dim targetPres As Presentation
Set targetPres = ActivePresentation
Dim secProps As SectionProperties
Set secProps = targetPres.SectionProperties
‘ エラー対策:セクション機能が使えない古い形式(.pptなど)をガード
On Error GoTo ErrorHandler
‘ —————————————————-
‘ ステップ1: 既存のセクションをすべて削除する
‘ —————————————————-
‘ ※セクションを削除しても、中のスライドは消えないので安心してください!
Dim i As Long
If secProps.Count > 0 Then
‘ 後ろから削除していくのがコレクション操作の鉄則(インデックスのズレ防止)
For i = secProps.Count To 1 Step -1
‘ 第二引数: 0 = セクションと中のスライドを削除, 1 = セクションのみ削除(スライド残す)
secProps.Delete i, 1
Next i
End If
‘ —————————————————-
‘ ステップ2: 新しいセクション構造を構築する
‘ —————————————————-
‘ ここでは例として、特定のルール(例: 5枚ごとにセクションを切る)で自動化します
Dim totalSlides As Long
totalSlides = targetPres.Slides.Count
If totalSlides = 0 Then
MsgBox “スライドが1枚もありません!”, vbExclamation
Exit Sub
End If
‘ 最初のセクションは必ずスライド1からスタート
secProps.AddSection 1, “01. 導入とアジェンダ”
‘ 5枚目以降にスライドがある場合、セクションを追加していく
If totalSlides >= 6 Then
secProps.AddSection 6, “02. メインソリューション”
End If
If totalSlides >= 11 Then
secProps.AddSection 11, “03. 導入事例と実績”
End If
If totalSlides >= 16 Then
secProps.AddSection 16, “04. まとめと今後の展望”
End If
‘ —————————————————-
‘ 完了メッセージ
‘ —————————————————-
MsgBox “セクションの自動整理が完了しました!総セクション数: ” & secProps.Count, vbInformation
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub
コードのここがポイント!先輩エンジニアの解説
1. コレクション操作は「後ろから(逆順)」が鉄則
`For i = secProps.Count To 1 Step -1` の部分です。前から順番にセクションを削除していくと、インデックス(番号)が繰り上がってしまい、予期せぬエラーや消し残しが発生します。これはコレクションを操作する際のエンジニアの常識ですので、ぜひ覚えておいてください。
2. `Delete` メソッドの第二引数
`secProps.Delete i, 1` の `1` は、「セクション区切りだけを消して、スライド自体は残す」という指定です。ここを `0` にしてしまうと、セクションと一緒にスライドまで宇宙の彼方へ消え去ってしまうので注意しましょう。
—
4. 陥りやすい罠とエラー回避の知見
PowerPoint VBAでセクションをハックする際、現場でよくある失敗パターンをいくつか共有しておきます。
- 罠1:そもそもセクションがサポートされていないファイル形式
古い `.ppt` 形式(PowerPoint 97-2003形式)や、一部の互換モードで開いているファイルでは、`SectionProperties` を呼び出した瞬間に実行時エラー(オブジェクトはサポートされていません)が発生します。必ず `ActivePresentation.FileFormat` をチェックするか、今回のように `On Error` でトラップする防御的プログラミングを心がけましょう。
- 罠2:存在しないスライドインデックスを指定して怒られる
`AddSection(Index, Name)` の第一引数には、「そのセクションの先頭になるスライドの番号」を指定します。例えば全10枚の資料に対して `AddSection(15, “おまけ”)` なんて指定すると、VBAが「そんなスライドないよ!」と怒り出します。セクションを追加する前には必ず `Slides.Count` との大小関係をチェックしましょう。
—
まとめ:セクション自動化でプレゼン資料作成を「システム化」する
今回は `Presentation.SectionProperties` を使ったセクションの自動化・構造化について解説しました。
ここをクリアすれば、単なる「手作業の代替」としてのマクロから脱却し、「資料の構造そのものをプログラムでデザインする」という一段上の自動化エンジニアの領域に到達できます。
毎月の定例レポートや、大量のマスターデータからスライドを自動生成するシステムを組む際、このセクション操作のテクニックは間違いなくあなたの大きな武器になります。
ぜひ、手元のスライドで試してみてくださいね。それでは、次回の応用編でお会いしましょう!
