みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでPowerPointを操作する方法についてシリーズでお伝えしています。
前回はコチラの記事でした。
エクセルVBAでPowerPointプレゼンテーションを開き、スライドを取得するというところまでお伝えしました。
PowerPointのオブジェクト構造はアプリケーション→プレゼンテーション→スライドという階層構造になっているのですが、今回はスライドの配下にあるシェイプについてお伝えしていきたいと思います。
エクセルVBAでPowerPointスライドのシェイプ一覧を取得する方法です。
では、行ってみましょう。
シェイプとは何か
PowerPointを操作すると言ったら、テキストボックスの中のテキストを入力したり、円や四角形のオブジェクトを移動したりコピーしたり、エクセルからグラフをコピーして貼り付けしたり、といった操作になります。
PowerPointではそれらのテキストボックス、円や四角形のオブジェクト、グラフなどスライドに配置するアイテムは全て「シェイプ」と言います。
英語ではshapeと書きまして、「形、形状、かっこう」といった意味ですが、PowerPointにおけるシェイプとはMicrosoftによると
PowerPoint プレゼンテーションはスライドの集合で構成されていますが、一般的に PowerPoint スライドは 1 つまたは複数の Shape オブジェクトで構成されています。ピクチャ、タイトル、テキスト、OLE オブジェクト、オートシェイプなど、スライドに含まれるアイテムはすべて Shape オブジェクトです。
と説明されています。
PowerPointスライド上のシェイプ名を書き出すプログラム
では、そんなシェイプを操作していきたいと思いますが、こちらのプログラムを実行してみましょう。
Sub PowerPointシェイプのNameを出力する()
Dim ppApp As New PowerPoint.Application
ppApp.Visible = True
Dim ppPrs As PowerPoint.Presentation
Set ppPrs = ppApp.Presentations.Open(ThisWorkbook.Path & "\ひな形.pptx")
Dim ppSld As PowerPoint.Slide 'スライドオブジェクト
Set ppSld = ppPrs.Slides(1) '1ページ目のスライドをセット
Dim shp As Object
For Each shp In ppSld.Shapes
Debug.Print shp.Name
Next shp
ppApp.Quit
Set ppApp = Nothing
End Sub
10行目までは前回のプログラムと同様です。
- PowerPointアプリケーション、プレゼンテーション、スライドの各オブジェクトを準備
- 「ひな形.pptx」を開き、1ページ目をppSldにセット
という動作ですね。
Shapesオブジェクト
その先の部分ですがShapesオブジェクトというものが出てきますね。
と指定することで、指定したスライド上のShapeオブジェクトのコレクションを表します。
ShapesオブジェクトはPowerPointの操作でかなり頻繁に使うので覚えておいてください。
言い換えると
- スライド上のアイテム全体の集まり:Shapesオブジェクト
- アイテムの一つ一つ:Shapeオブジェクト
とも言えます。
Shapeオブジェクトの名前を取得する
For Each文でそれらのコレクション内のShapeオブジェクト一つ一つについて繰り返しをして、そのNameプロパティを出力します。
例として、「ひな形.pptx」のスライド1がこちらのスライドだった場合
上記プログラムを実行すると、イミディエイトウィンドウにこのように出力されます。
Slide Number Placeholder 2
TextBox 4
Oval 3
Right Arrow 5
Cloud Callout 6
Nameプロパティは、その名の通りシェイプの名前を表すのですが、シェイプが作成されたときにそのシェイプには「種類 番号」という形式の名前が自動的に割り振られます。
それらが出力されたということになるわけです。つまり、今回の場合はそれぞれ
というような名前が付けられていたということになります。
まとめ
エクセルVBAでPowerPointスライドのシェイプ一覧を取得する方法についてお伝えしました。
PowerPointのオブジェクト構造として
- PowerPointアプリケーション
- プレゼンテーション
- スライド
- シェイプ
- スライド
- プレゼンテーション
となっていること、またシェイプのコレクションとしての、Shapesオブジェクトが存在することなどをご理解頂ければと思います。
次回はシェイプを操作する下準備として、シェイプのインデックス番号を調べる方法についてお伝えします。
どうぞお楽しみに!
連載目次:エクセルVBAでグラフとPowerPointを操作する
エクセルで様々な集計や分析をした結果の表やグラフを、最終的にPowerPointに貼り付け…という作業は結構多いですよね。1つ2つなら良いですが、大量にあった場合は大変です。そんな時にはVBAで自動化をしてしまいましょう!- エクセルVBAでPowerPointを操作するための準備と最も簡単なプログラム
- エクセルVBAでPowerPointのプレゼンテーションを開く方法・スライドを取得する方法
- エクセルVBAでPowerPointスライド上のシェイプ一覧を取得する
- エクセルVBAでPowerPointの特定のシェイプのインデックス番号を調べる方法
- エクセルVBAでPowerPointのテキストボックスに文字を入力する
- エクセルVBAでPowerPointでタイトルを変更しながらスライドを大量に生成する
- 初心者でも分かる!エクセルVBAでグラフを操作し取り扱うための超基本の第一歩
- エクセルVBAでグラフの元となるデータ範囲を次々と変更するプログラム
- 簡単!エクセルVBAでシート上のグラフをコピーしてPowerPointにペーストする
- エクセルVBAでグラフのデータ範囲を変更しながらPowerPointに連続して貼り付ける
- エクセルVBAでグラフタイトルを変更する方法とChartTitleについて
- エクセルVBAでグラフの軸の最大値・最小値や軸タイトルを設定する方法