top of page

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

  • 執筆者の写真: 伊賀上真左彦
    伊賀上真左彦
  • 4 日前
  • 読了時間: 5分

PowerPointで資料を作っていると、各スライドの右下にページ番号を入れたい場面があります。


通常はフッター機能やスライド番号を使えばよいのですが、案件によっては、

  • ページ番号を画像として扱いたい

  • 既存テンプレートのフッター機能を使いたくない

  • スライド番号を毎回同じ位置・同じ見た目で入れたい

  • 再実行時に古い番号を消して貼り直したい

  • 複数ファイルで使えるように、PowerPointアドイン化したい

というケースがあります。


近年、AIを使い「画像」としてスライドを作る場合が増えています。その場合、パワーポイントの従来の機能ではページ番号を入れることができません。ページ番号の上に画像を張り付けていますから。


この記事では、PowerPoint VBAを使って、各スライド右下にページ番号をPNG画像として挿入する方法を紹介します。


さらに、マクロを個別ファイルではなくPowerPointアドインとして登録し、PowerPointアプリ側に機能として仕込む方法も解説します。


完成イメージ

このVBAでは、次の処理を行います。


  1. 各スライドを順番に処理する

  2. 前回このマクロで挿入したページ番号画像を削除する

  3. スライド番号のテキストボックスを一時的に作成する

  4. そのテキストボックスをPNG画像として書き出す

  5. 書き出したPNGを右下に画像として挿入する

  6. 挿入した画像にタグを付け、次回実行時に削除対象として識別する


ポイントは、単なるテキストボックスではなく、最終的に「画像」として貼ることです。マクロは何度でも実行可能で、その場合、前回貼り付けたページ数の画像はいったん削除されます。


下準備


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アドインとして保存します。



アドイン化の手順

  1. PowerPointで新規プレゼンテーションを作成する

  2. Alt + F11 でVBAエディタを開く

  3. 標準モジュールにマクロを貼り付ける

  4. PowerPointに戻る

  5. 名前を付けて保存 を選ぶ

  6. ファイルの種類で PowerPoint アドイン(*.ppam) を選ぶ

  7. 任意の場所に保存する

  8. PowerPointの ファイルオプションアドイン を開く

  9. 下部の 管理: PowerPoint アドイン を選び、設定 をクリックする

  10. 新規追加 から保存した .ppam を選択する


これで、PowerPointアプリ側にマクロを登録できます。

以後は、どのプレゼンテーションを開いていても、現在開いているファイルに対してページ番号画像を挿入できます。



クイックアクセスツールバーに登録すると便利

アドインとして登録しただけでは、毎回マクロ一覧から実行する必要があります。

よく使う場合は、クイックアクセスツールバーに登録しておくと便利です。

手順は次のとおりです。


  1. PowerPointの ファイルオプション を開く

  2. クイック アクセス ツール バー を選ぶ

  3. コマンドの選択マクロ を選ぶ

  4. InsertPageNumbersAsImages を選択する

  5. 追加 をクリックする

  6. 必要に応じてアイコンや表示名を変更する

  7. OK を押す


これで、ボタン1つでページ番号画像を更新できます。


注意点

既存の手動ページ番号は削除されない

このマクロが削除するのは、マクロ自身が挿入したページ番号画像だけです。

名前やタグで識別しているため、手動で配置した別の画像やテキストは削除しません。


スライドの順番を変えたら再実行する

ページ番号は実行時点の SlideIndex を使っています。

スライドの順番を変えた場合は、もう一度マクロを実行してください。古い番号を削除して、現在の順番に合わせて貼り直されます。


一時PNGはTEMPフォルダに作成される

画像化のため、一時的にPNGファイルを作っています。

tmpPath = Environ$("TEMP") & "\ppt_page_number_" & pageNo & ".png"

挿入後に削除していますが、環境によって削除に失敗する可能性もあります。通常は大きな問題にはなりません。


まとめ

PowerPoint VBAを使うと、ページ番号を単なるテキストではなく画像として挿入できます。

今回の方法では、

  • 各スライド右下にページ番号を画像として挿入

  • 前回挿入した番号画像を自動削除

  • スライド順に合わせて番号を再生成

  • PowerPointアドイン化して複数ファイルで利用可能

  • クイックアクセスツールバーからワンクリック実行可能

という仕組みを作れます。


フッター機能では対応しにくいレイアウトや、画像として固定したい資料作成フローで役立つ方法です。


コメント


bottom of page