PowerPointVBAで作業を効率化しようと考えたときに、避けて通れないのが図形に対する処理です。
図形に関しては、ExcelVBAと少し形式が異なる部分があり、初めは引っかかることがよくあります。
今回は、図形の処理の基本となる図形内のテキスト、これを置換するVBAについてご紹介します。
今回は、Powerpoint内のスライドに会議の議題と内容が書かれたものをサンプルファイルとして用意しています。
この中の議題のテキストボックスに入っている「議題」を「アジェンダ」に変更。
スライド内のテキストが、一括で置換されるのを見ていきましょう。
それでは、ここからは、実際のコードと内容を解説します。まずは、こちらが実際のコードとなります。手順の流れとしては、
- 図形内のテキストを取得
- テキストを置換
- 置換したテキストを図形内に戻す
- 上記処理を全ての図形に対して繰り返す
という流れになっています。
VBAコード
Sub replaceShpText()
'変数の宣言
Dim shp As Shape '図形オブジェクト
Dim strShp As String '図形内のテキスト
'1枚目のスライドの図形を全て処理
For Each shp In ActivePresentation.Slides(1).Shapes
'図形内のテキストを取得
strShp = shp.TextFrame.TextRange.Text
'テキストを置換
strShp = Replace(strShp, "議題", "アジェンダ")
'図形に置換したテキストを戻す
shp.TextFrame.TextRange.Text = strShp
Next
End Sub
詳細解説
'変数の宣言
Dim shp As Shape '図形オブジェクト
Dim strShp As String '図形内のテキスト
まずは、変数の宣言です。今回は図形内のテキストを置換していきますので、
図形を入れる図形オブジェクト(shp)と、図形内のテキストを格納する文字列型の変数(strShp)を用意します。
'1枚目のスライドの図形を全て処理
For Each shp In ActivePresentation.Slides(1).Shapes
Powerpoint内の1枚目のスライドを「ActivePresentation.Slides(1)」で指定し、「.Shepes」でスライド内の全ての図形を指定します。
「For Each~In」文で、全ての図形から1つずつ図形を取り出して処理を行います。
'図形内のテキストを取得
strShp = shp.TextFrame.TextRange.Text
用意しておいた文字列型の変数「strShp」に、図形内のテキストを入れていきます。図形オブジェクトは次のような階層構造になっています。
この中の構造を変更して、テキストの中身や文字のフォントを変えることができます。今回はテキストの中身を取得するので、テキスト範囲であるTextRangeオブジェクトのTextプロパティを参照します。
'テキストを置換
strShp = Replace(strShp, "議題", "アジェンダ")
Replace関数を使ってテキストを置換します。テキストの中身を入れた変数「strShp」に対して、「”議題”→“アジェンダ”」の置換処理をかけます。
'図形に置換したテキストを戻す
shp.TextFrame.TextRange.Text = strShp
図形内のテキスト変数「shp.TextFrame.TextRange.Text」に、置換した文字列を戻します。
VBAを実行すると、下のように、「議題1」「議題2」・・のテキストボックスが、「アジェンダ1」「アジェンダ2」・・と変更されているのが分かります!
今回はスライド内の図形のテキストをVBAで置換する方法についてご紹介しました。
これを応用すると、複数の単語を一括して変更するなど、便利に効率化できることができるようになります。
皆様も是非、試してくださいね!