PowerPointには、Wordのようにボタン一つで目次を自動生成する標準機能はありません。しかし、VBA(マクロ)やPythonスクリプトを利用することで、各スライドのタイトルを抽出して目次ページを自動で作成することが可能です。
実行手順
- VBAエディタを開く
- 目次を生成したいPowerPointファイルを開きます。
- キーボードで
Alt+F11を押して、VBAエディタを開きます。
- モジュールの挿入
- VBAエディタのメニューバーから「挿入」→「標準モジュール」を選択します。
- コードの貼り付け
- 表示された白い画面(コードウィンドウ)に、後述のVBAコードをそのままコピー&ペーストします。
- マクロの実行
- VBAエディタのメニューバーから「実行」→「Sub/ユーザーフォームの実行」(またはキーボードで
F5)を押します。
- VBAエディタのメニューバーから「実行」→「Sub/ユーザーフォームの実行」(またはキーボードで
- 完了
- プレゼンテーションの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]目次を自動生成する方法](https://mtoy.work/develop/wp-content/uploads/sites/3/2026/04/apple-logowebp-160x90.png)
[Mac]「._」ファイル作成無効化
Macで自動生成される「._」ファイルの作成を無効化する方法を解説。無効化してもMac本体に不具合が起きない理由や、カラータグ等の消失といったデメリット、サーバー運用におけるメリット、ターミナルやFinderでの設定手順を紹介します。

コメント