[PowerPoint]目次を自動生成する方法

パワーポイント TIPS
パワーポイント
TIPS言語

PowerPointには、Wordのようにボタン一つで目次を自動生成する標準機能はありません。しかし、VBA(マクロ)やPythonスクリプトを利用することで、各スライドのタイトルを抽出して目次ページを自動で作成することが可能です。

実行手順

  1. VBAエディタを開く
    • 目次を生成したいPowerPointファイルを開きます。
    • キーボードで Alt + F11 を押して、VBAエディタを開きます。
  2. モジュールの挿入
    • VBAエディタのメニューバーから「挿入」→「標準モジュール」を選択します。
  3. コードの貼り付け
    • 表示された白い画面(コードウィンドウ)に、後述のVBAコードをそのままコピー&ペーストします。
  4. マクロの実行
    • VBAエディタのメニューバーから「実行」→「Sub/ユーザーフォームの実行」(またはキーボードで F5)を押します。
  5. 完了
    • プレゼンテーションの2ページ目に、各スライドのタイトルとページ番号が記載され、クリックするとそのページにジャンプできる目次スライドが自動で作成・更新されます。
Sub CreateTableOfContents()
    \' === 設定項目 ===
    Const TOC_SLIDE_INDEX As Integer = 2 \' 目次を挿入するスライド番号 (2ページ目)
    Const TOC_TITLE As String = \"目次\"     \' 目次スライドのタイトル
    \' ================

    Dim ppt As Presentation
    Set ppt = ActivePresentation

    Dim tocSlide As Slide
    Dim targetShape As Shape
    Dim s As Slide
    Dim i As Integer

    \' --- 既存の目次スライドがあれば削除 ---
    On Error Resume Next \' スライドが存在しない場合のエラーを無視
    ppt.Slides(\"p_toc_slide\").Delete
    On Error GoTo 0

    \' --- 新しい目次スライドを挿入 ---
    Set tocSlide = ppt.Slides.Add(TOC_SLIDE_INDEX, ppLayoutTitleOnly)
    tocSlide.Name = \"p_toc_slide\" \' 識別用の名前を付ける
    tocSlide.Shapes.Title.TextFrame.TextRange.Text = TOC_TITLE

    \' --- 目次を書き込むテキストボックスを作成 ---
    Set targetShape = tocSlide.Shapes.AddTextbox(msoTextOrientationHorizontal, 1 * 72, 1.5 * 72, 14 * 72, 7 * 72)
    
    With targetShape.TextFrame
        .MarginBottom = 0
        .MarginLeft = 0
        .MarginRight = 0
        .MarginTop = 0
        .WordWrap = msoTrue
        With .TextRange.Font
            .Name = \"メイリオ\" \' フォントを指定
            .Size = 18         \' フォントサイズを指定
        End With
    End With

    \' --- 各スライドのタイトルをループで取得し、目次に追記 ---
    For i = 1 To ppt.Slides.Count
        Set s = ppt.Slides(i)
        
        \' 自分自身(目次スライド)は除外
        If s.SlideIndex <> TOC_SLIDE_INDEX Then
            \' スライドにタイトルが存在する場合のみ処理
            If s.Shapes.HasTitle Then
                If s.Shapes.Title.TextFrame.HasText Then
                    Dim titleText As String
                    titleText = s.Shapes.Title.TextFrame.TextRange.Text
                    
                    Dim newPara As TextRange
                    \' テキストボックスの末尾に「タイトル タブ ページ番号 改行」を追加
                    Set newPara = targetShape.TextFrame.TextRange.InsertAfter(titleText & vbTab & s.SlideNumber & vbCrLf)
                    
                    \' ハイパーリンクを設定(追加したテキスト全体ではなく、その段落に設定)
                    Dim paraToLink As TextRange
                    Set paraToLink = targetShape.TextFrame.TextRange.Paragraphs(targetShape.TextFrame.TextRange.Paragraphs.Count - 1)
                    
                    With paraToLink.ActionSettings(ppMouseClick)
                        .Action = ppActionHyperlink
                        .Hyperlink.SubAddress = s.SlideID & \",\" & s.SlideIndex & \",\" & titleText
                    End With
                End If
            End If
        End If
    Next i
    
    \' 最後に余分な改行を削除
    If targetShape.TextFrame.TextRange.Characters.Count > 1 Then
        targetShape.TextFrame.TextRange.Characters(targetShape.TextFrame.TextRange.Characters.Count, 1).Delete
    End If
    
    MsgBox \"目次が作成・更新されました。\"
End Sub
[PowerPoint]目次を自動生成する方法
[Mac]「._」ファイル作成無効化
Macで自動生成される「._」ファイルの作成を無効化する方法を解説。無効化してもMac本体に不具合が起きない理由や、カラータグ等の消失といったデメリット、サーバー運用におけるメリット、ターミナルやFinderでの設定手順を紹介します。
Q よくある質問 (FAQ)
Q. PowerPointに目次を自動生成する標準機能はありますか?
A.
いいえ、PowerPointにはWordのような目次自動生成の標準機能はありません。そのため、VBAマクロなどを活用して自動化する必要があります。
Q. 自動生成された目次から各スライドへジャンプすることは可能ですか?
A.
はい。紹介しているVBAを実行することで、各スライドのタイトルとページ番号が抽出され、クリックするだけで該当ページにジャンプできるリンク付きの目次スライドが作成されます。

コメント

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