【AI対応】PowerPoint VBAでページ番号を「画像」として各スライド右下に自動挿入する方法
- 伊賀上真左彦

- 4 日前
- 読了時間: 5分
PowerPointで資料を作っていると、各スライドの右下にページ番号を入れたい場面があります。
通常はフッター機能やスライド番号を使えばよいのですが、案件によっては、
ページ番号を画像として扱いたい
既存テンプレートのフッター機能を使いたくない
スライド番号を毎回同じ位置・同じ見た目で入れたい
再実行時に古い番号を消して貼り直したい
複数ファイルで使えるように、PowerPointアドイン化したい
というケースがあります。
近年、AIを使い「画像」としてスライドを作る場合が増えています。その場合、パワーポイントの従来の機能ではページ番号を入れることができません。ページ番号の上に画像を張り付けていますから。
この記事では、PowerPoint VBAを使って、各スライド右下にページ番号をPNG画像として挿入する方法を紹介します。
さらに、マクロを個別ファイルではなくPowerPointアドインとして登録し、PowerPointアプリ側に機能として仕込む方法も解説します。
完成イメージ
このVBAでは、次の処理を行います。
各スライドを順番に処理する
前回このマクロで挿入したページ番号画像を削除する
スライド番号のテキストボックスを一時的に作成する
そのテキストボックスをPNG画像として書き出す
書き出したPNGを右下に画像として挿入する
挿入した画像にタグを付け、次回実行時に削除対象として識別する
ポイントは、単なるテキストボックスではなく、最終的に「画像」として貼ることです。マクロは何度でも実行可能で、その場合、前回貼り付けたページ数の画像はいったん削除されます。
下準備
PowerPointでVBAを使った経験がない方は、以下の準備を行ってください。
①「ファイル」>「その他」>「オプション」から設定画面を開く
②「リボンのユーザー設定」から「開発」にチェックを入れて、「OK」をクリック

③「開発」>「マクロのセキュリティ」>「すべてのマクロを有効にする」>「OK」をクリック

これは一定のリスクがある行為ですが、自分が作成したマクロを使う分には注意は不要と考えます。
VBAコード
PowerPointのVBAエディタで標準モジュールを作成し、以下のコードを貼り付けます。
方法
①「開発」>「Visual Basic」をクリック
②「挿入」>「標準モジュール」をクリック

③追加された「Module1」に以下のコードを張り付ける

Option Explicit
Sub InsertPageNumbersAsImages()
Const TAG_KEY As String = "AutoPageNumberImage"
Const NAME_PREFIX As String = "AutoPageNumberImage_"
' 表示調整
Const IMG_WIDTH As Single = 36
Const IMG_HEIGHT As Single = 18
Const MARGIN_RIGHT As Single = 18
Const MARGIN_BOTTOM As Single = 12
Const FONT_NAME As String = "Yu Gothic"
Const FONT_SIZE As Single = 10
Dim pres As Presentation
Dim sld As Slide
Dim shp As Shape
Dim tmpText As Shape
Dim pageImg As Shape
Dim i As Long
Dim pageNo As Long
Dim tmpPath As String
Set pres = ActivePresentation
' 既存のページ番号画像を削除
For Each sld In pres.Slides
For i = sld.Shapes.Count To 1 Step -1
Set shp = sld.Shapes(i)
If shp.Name Like NAME_PREFIX & "*" Then
shp.Delete
Else
On Error Resume Next
If shp.Tags(TAG_KEY) = "1" Then shp.Delete
On Error GoTo 0
End If
Next i
Next sld
' 新しいページ番号画像を挿入
For Each sld In pres.Slides
pageNo = sld.SlideIndex
tmpPath = Environ$("TEMP") & "\ppt_page_number_" & pageNo & ".png"
' いったんテキストボックスを作る
Set tmpText = sld.Shapes.AddTextbox( _
Orientation:=msoTextOrientationHorizontal, _
Left:=0, _
Top:=0, _
Width:=IMG_WIDTH, _
Height:=IMG_HEIGHT)
With tmpText
.Name = "TempPageNumberText"
.Fill.Visible = msoFalse
.Line.Visible = msoFalse
With .TextFrame2
.VerticalAnchor = msoAnchorMiddle
.MarginLeft = 0
.MarginRight = 0
.MarginTop = 0
.MarginBottom = 0
With .TextRange
.Text = CStr(pageNo)
.ParagraphFormat.Alignment = msoAlignCenter
With .Font
.Name = FONT_NAME
.Size = FONT_SIZE
.Fill.ForeColor.RGB = RGB(80, 80, 80)
End With
End With
End With
' テキストボックスをPNGとして書き出す
.Export tmpPath, ppShapeFormatPNG
.Delete
End With
' PNG画像として右下に挿入
Set pageImg = sld.Shapes.AddPicture( _
FileName:=tmpPath, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=pres.PageSetup.SlideWidth - IMG_WIDTH - MARGIN_RIGHT, _
Top:=pres.PageSetup.SlideHeight - IMG_HEIGHT - MARGIN_BOTTOM, _
Width:=IMG_WIDTH, _
Height:=IMG_HEIGHT)
With pageImg
.Name = NAME_PREFIX & pageNo
.Tags.Add TAG_KEY, "1"
End With
On Error Resume Next
Kill tmpPath
On Error GoTo 0
Next sld
MsgBox "ページ番号画像を更新しました。", vbInformation
End Sub
PowerPointアドインとして登録する
このマクロを特定のPowerPointファイルに入れるだけだと、そのファイルでしか使えません。複数の資料で使いたい場合は、PowerPointアドインとして保存します。
アドイン化の手順
PowerPointで新規プレゼンテーションを作成する
Alt + F11 でVBAエディタを開く
標準モジュールにマクロを貼り付ける
PowerPointに戻る
名前を付けて保存 を選ぶ
ファイルの種類で PowerPoint アドイン(*.ppam) を選ぶ
任意の場所に保存する
PowerPointの ファイル → オプション → アドイン を開く
下部の 管理: PowerPoint アドイン を選び、設定 をクリックする
新規追加 から保存した .ppam を選択する
これで、PowerPointアプリ側にマクロを登録できます。
以後は、どのプレゼンテーションを開いていても、現在開いているファイルに対してページ番号画像を挿入できます。
クイックアクセスツールバーに登録すると便利
アドインとして登録しただけでは、毎回マクロ一覧から実行する必要があります。
よく使う場合は、クイックアクセスツールバーに登録しておくと便利です。
手順は次のとおりです。
PowerPointの ファイル → オプション を開く
クイック アクセス ツール バー を選ぶ
コマンドの選択 で マクロ を選ぶ
InsertPageNumbersAsImages を選択する
追加 をクリックする
必要に応じてアイコンや表示名を変更する
OK を押す
これで、ボタン1つでページ番号画像を更新できます。
注意点
既存の手動ページ番号は削除されない
このマクロが削除するのは、マクロ自身が挿入したページ番号画像だけです。
名前やタグで識別しているため、手動で配置した別の画像やテキストは削除しません。
スライドの順番を変えたら再実行する
ページ番号は実行時点の SlideIndex を使っています。
スライドの順番を変えた場合は、もう一度マクロを実行してください。古い番号を削除して、現在の順番に合わせて貼り直されます。
一時PNGはTEMPフォルダに作成される
画像化のため、一時的にPNGファイルを作っています。
tmpPath = Environ$("TEMP") & "\ppt_page_number_" & pageNo & ".png"
挿入後に削除していますが、環境によって削除に失敗する可能性もあります。通常は大きな問題にはなりません。
まとめ
PowerPoint VBAを使うと、ページ番号を単なるテキストではなく画像として挿入できます。
今回の方法では、
各スライド右下にページ番号を画像として挿入
前回挿入した番号画像を自動削除
スライド順に合わせて番号を再生成
PowerPointアドイン化して複数ファイルで利用可能
クイックアクセスツールバーからワンクリック実行可能
という仕組みを作れます。
フッター機能では対応しにくいレイアウトや、画像として固定したい資料作成フローで役立つ方法です。




コメント