Home » パワーポイントマクロ・PowerPoint VBAの使い方 » プレースホルダー » 連番を振りなおすPowerPointマクロ

連番を振りなおすPowerPointマクロ

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013, Windows版PowerPoint2016

「PowerPointのタイトルプレースホルダーに連番が入っているときに、マクロで連番を振りなおすにはどうしたらいいのでしょうか?」
といったご質問をいただきました。

連番を振りなおすPowerPointマクロ

例えば上図のように、スライドのタイトルプレースホルダーに、
  1. はじめに
  2. はじめてのマクロ
  3. VBAの関数
のような、連続する数字と文字列が入力されているときに、スライドの順番を入れ替えたあとで、VBA(Visual Basic for Applications)を使って連番を振りなおしたい、という要望です。

Wordであれば適切なスタイルを設定しておけば、このようなマクロは不要ですけれど、PowerPointの場合、複数のスライドに連番を自動的に振るような機能はスライド番号しかないため、こういった要望が出てくることは納得できます。

[スポンサードリンク]

連番を振りなおすサンプルマクロ

参考になりそうなマクロを作ってみました。

Sub タイトル文字列の連番を振りなおす()

 Const SEP = ". " ' 数字と文字列の間の区切り文字

 Dim pos As Long ' SEP(区切り文字)の位置
 Dim txt As String
 Dim sld As Slide
 Dim n As Long: n = 1

 For Each sld In ActivePresentation.Slides
  txt = sld.Shapes.Title.TextFrame.TextRange.Text
  pos = InStr(txt, SEP)
  If pos > 0 Then
   txt = n & SEP & Mid(txt, pos + Len(SEP))
   sld.Shapes.Title.TextFrame.TextRange.Text = txt
   n = n + 1
  End If
 Next sld

End Sub

上記のマクロは「1. はじめに」のように、数字の直後に「. 」(ドットと半角スペース)が存在して、その後ろに文字列が入力されていることを想定しています。

このようなフォーマットでタイトルプレースホルダーに文字列が入力されているときに、スライドの順番を入れ替えたあとに、上記マクロを実行すると連番が振りなおされます。

連番の入っていないスライドが混在していた場合、その連番の入ったスライドは無視して、元々連番が入っていたスライドだけに連番を振りなおします。

サンプルマクロの解説

連番部分と文字列を区別するには、間に何らかの決まった記号等を入れておくのが一番です。上記のマクロでは「. 」(ドットと半角スペース)を、定数・SEPで指定しています。
 Const SEP = ". " ' 数字と文字列の間の区切り文字

メインの処理は以下のとおりです。

アクティブなプレゼンテーションを表すPresentationオブジェクトの、全SlideオブジェクトにFor Each~Nextループを回して、
 For Each sld In ActivePresentation.Slides

まず各スライドのタイトルプレースホルダー内の文字列を取得します。
  txt = sld.Shapes.Title.TextFrame.TextRange.Text

次に定数・SEPに定義しておいた区切り文字を探して、
  pos = InStr(txt, SEP)

区切り文字が見つかった場合に、
  If pos > 0 Then

新しい連番と、区切り文字と、区切り文字よりうしろの文字列を結合して、
   txt = n & SEP & Mid(txt, pos + Len(SEP))

タイトルプレースホルダーに入れなおして、
   sld.Shapes.Title.TextFrame.TextRange.Text = txt

連番を振る変数・nをインクリメントしています。
   n = n + 1

何らかの文字列を見つけて、その後ろの文字列を取得する「pos = InStr(txt, SEP)」「Mid(txt, pos + Len(SEP))」という考え方は、ExcelでFIND関数やMID関数などを使うのと同じです。

PowerPoint VBAの場合、
 For Each sld In ActivePresentation.Slides
  txt = sld.Shapes.Title.TextFrame.TextRange.Text
あたりで使っている、オブジェクトの階層関係が難しいところでしょう。

Excelと比べると、PowerPointはオブジェクトモデルの階層関係が深く、マクロ記録機能もなくなってしまっているため、基本的な階層構造を自分の頭に叩き込まなければ、PowerPointマクロを作ることは不可能です。基礎的な英文法を自分の頭に叩き込んで、咄嗟に口から出せるようにしない限りは、ちゃんとした英会話ができないのとまったく同じことです。

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » プレースホルダー » 連番を振りなおすPowerPointマクロ

「プレースホルダー」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.