エクセルVBAでPowerPointスライド上のシェイプ一覧を取得する

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでPowerPointを操作する方法についてシリーズでお伝えしています。

前回はコチラの記事でした。

エクセルVBAでPowerPointのプレゼンテーションを開く方法・スライドを取得する方法
エクセルVBAでPowerPointを操作する方法をシリーズでお伝えしています。今回は特定の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オブジェクトというものが出てきますね。

PowerPointスライドオブジェクト.Shapes

と指定することで、指定したスライド上のShapeオブジェクトのコレクションを表します。

ShapesオブジェクトはPowerPointの操作でかなり頻繁に使うので覚えておいてください。

言い換えると

  • スライド上のアイテム全体の集まり:Shapesオブジェクト
  • アイテムの一つ一つ:Shapeオブジェクト

とも言えます。

Shapeオブジェクトの名前を取得する

For Each文でそれらのコレクション内のShapeオブジェクト一つ一つについて繰り返しをして、そのNameプロパティを出力します。

Shapeオブジェクト.Name

例として、「ひな形.pptx」のスライド1がこちらのスライドだった場合

PowerPointスライドの例

上記プログラムを実行すると、イミディエイトウィンドウにこのように出力されます。

Footer Placeholder 1
Slide Number Placeholder 2
TextBox 4
Oval 3
Right Arrow 5
Cloud Callout 6

Nameプロパティは、その名の通りシェイプの名前を表すのですが、シェイプが作成されたときにそのシェイプには「種類 番号」という形式の名前が自動的に割り振られます。

それらが出力されたということになるわけです。つまり、今回の場合はそれぞれ

PowerPointのシェイプの名前

というような名前が付けられていたということになります。

まとめ

エクセルVBAでPowerPointスライドのシェイプ一覧を取得する方法についてお伝えしました。

PowerPointのオブジェクト構造として

  • PowerPointアプリケーション
    • プレゼンテーション
      • スライド
        • シェイプ

となっていること、またシェイプのコレクションとしての、Shapesオブジェクトが存在することなどをご理解頂ければと思います。

次回はシェイプを操作する下準備として、シェイプのインデックス番号を調べる方法についてお伝えします。

429 Too Many Requests

どうぞお楽しみに!

連載目次:エクセルVBAでグラフとPowerPointを操作する

エクセルで様々な集計や分析をした結果の表やグラフを、最終的にPowerPointに貼り付け…という作業は結構多いですよね。1つ2つなら良いですが、大量にあった場合は大変です。そんな時にはVBAで自動化をしてしまいましょう!
  1. エクセルVBAでPowerPointを操作するための準備と最も簡単なプログラム
  2. エクセルVBAでPowerPointのプレゼンテーションを開く方法・スライドを取得する方法
  3. エクセルVBAでPowerPointスライド上のシェイプ一覧を取得する
  4. エクセルVBAでPowerPointの特定のシェイプのインデックス番号を調べる方法
  5. エクセルVBAでPowerPointのテキストボックスに文字を入力する
  6. エクセルVBAでPowerPointでタイトルを変更しながらスライドを大量に生成する
  7. 初心者でも分かる!エクセルVBAでグラフを操作し取り扱うための超基本の第一歩
  8. エクセルVBAでグラフの元となるデータ範囲を次々と変更するプログラム
  9. 簡単!エクセルVBAでシート上のグラフをコピーしてPowerPointにペーストする
  10. エクセルVBAでグラフのデータ範囲を変更しながらPowerPointに連続して貼り付ける
  11. エクセルVBAでグラフタイトルを変更する方法とChartTitleについて
  12. エクセルVBAでグラフの軸の最大値・最小値や軸タイトルを設定する方法
タイトルとURLをコピーしました