PowerPoint VBAでShapeコレクションについてFor Eachループを回す方法

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

初心者向けPowerPoint VBAの入門シリーズとして、図形やテキストボックスのフォントを変えるマクロの作成を目指しています。

前回の記事はコチラ。

【初心者向けPowerPoint VBA】SlidesコレクションとSlideオブジェクトを取得する
初心者向けにPowerPoint VBAの入門シリーズをお送りしています。今回はPowerPoint VBAでプレゼンテーションのスライドを取得する方法、コレクションとは何かについてお伝えします。

スライドオブジェクトを取得する方法をお伝えしました。

Presentationオブジェクト→Slideオブジェクト…と来ましたので、次はいよいよ図形やテキストボックスなどの描画オブジェクトを表すShapeオブジェクトですね。

では、PowerPoint VBAでShapeオブジェクトを取得する方法です。

For Each文でループを回す方法を使いますよ。

でじゃ、行ってみましょう!

スポンサーリンク

前回までのおさらい

以下のプレゼンテーションを題材として使用します。

プレゼンテーションの例

2枚のスライドがありますが、両方のスライドに配置してある、全ての図形、テキストボックスについて、そのフォントを変更するマクロを目指していきます。

前回までで、以下のようにSlideオブジェクトの取得まではできるようになりました。

Sub Slidesオブジェクトの取得()

Debug.Print ActivePresentation.Slides(1).Name
Debug.Print ActivePresentation.Slides(1).SlideIndex

End Sub

今回は描画オブジェクト、つまりShapeオブジェクトの取得を目指していきます。

Shapeオブジェクトとは

PowerPoint VBAでは図形、オートシェイプ、テキストボックス、図など、スライドに配置する描画オブジェクトは、全てShapeオブジェクトとして取り扱うことができます。

当然ながら、スライド上には複数のShapeオブジェクトが存在する可能性がありますので、まずはShapesコレクションとして取得する必要があります。

Shapesコレクションを取得する

SlideオブジェクトからShapesコレクションを取得するには、Shapesプロパティを使います。

Slideオブジェクト.Shapes

例えば、以下のプロシージャを前述のプレゼンテーションについて実行をすると、イミディエイトウィンドウに「6」と表示されます。

Sub Shapesコレクションの取得()

Debug.Print ActivePresentation.Slides(1).Shapes.Count

End Sub

CountプロパティShapesコレクションの要素数を取得するものです。

Shapesコレクション.Count

ShapesコレクションからShapeオブジェクトを取得する

これでShapesコレクションが取得できたので、その中からShapeオブジェクトを特定してみましょう!

…って、どうするんですかね?

前回の記事でコレクションからオブジェクトを取得するには、インデックスか名前かを使うとお伝えしたのですが、どちらもわかりません…

Shapeコレクションについてループを回す

そんなときには、コレクションに含まれる全てのShapeオブジェクトについてループを回すという方法があります。

VBAではコレクション内のオブジェクトを一つ一つ取り出して繰り返し処理をするFor Each文という構文があります。

For Each 変数 In コレクション
 ’処理
Next 変数

まず、コレクションからオブジェクトを一つ取り出して、それを変数にセットします。

変数というのは、値やオブジェクトを入れることができるものです。

For Each文内(For Eachブロックといいます)で、そのオブジェクトを指し示すものとして利用できます。

そのオブジェクトについてFor Eachブロックの処理が終われば、また別のオブジェクトを変数にセットして、ブロック内の処理をします。

このようにコレクションから全てのオブジェクトを取り出し終わるまで繰り返します。

Shapesコレクションについて繰り返し処理をするプロシージャ

では、このFor Each文を実際に使ってみましょう。

以下のプロシージャを作成して実行してみます。

Sub Shapesコレクションのループ()

Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
    Debug.Print shp.Name
Next shp

End Sub

すると、イミディエイトウィンドウに以下のように出力がされます。

Shapesコレクション内のShapeオブジェクト名を出力

なお、NameプロパティShapeオブジェクトの名前を取得するものです。

Shapeオブジェクト.Name

Shapeオブジェクトの名前も、Slideオブジェクトのそれと同様、PowerPointが内部的に決めているもので、外側からは把握することができません。

今回のようなマクロを実行して調べる、ということはよくやります。

変数の宣言

コードの3行目ですが、変数の宣言を行っています。

先ほどもお伝えしましたが、変数とは、値やオブジェクトを入れることができるものです。

For Each文内では「shp」という変数を使用しています。

こちらの記事でお伝えした通り、「変数の宣言を強制する」ようにしましたので、「これからこの変数を、このタイプで使うよ」という宣言が必要なのです。

変数の宣言はDimステートメントで行います。

Dim 変数名 As

なお、変数名は基本的に好きに決めることができます。日本語も使えますが、一般的にはアルファベットを使うことが多いです。

まとめ

以上、PowerPoint VBAでShapeコレクションについてループを回す方法をお伝えしました。

これで、Shapeオブジェクトも取得して操作をすることができるようになりました。

次は、Shapeオブジェクトからテキストを取得する方法を見ていきます。

次回、進めていきます!

【初心者向けPowerPoint VBA】Shapeオブジェクトのテキストを取得する方法
初心者向けPowerPoint VBAのシリーズとして、図形やテキストオブジェクトのフォントを変更するマクロを作成する方法をお伝えしています。今回は、Shapeオブジェクトのテキストを取得する方法です。

どうぞお楽しみに!

連載目次:初心者向けPowerPoint VBAのはじめの一歩

PowerPointはお仕事で非常によく使うプレゼンテーション作成ソフトですよね。実は、PowerPointでもVBAでプログラミングができるんです。本シリーズでは、初心者向けにPowerPoint VBAの初め方についてお伝えしていきます。
  1. 初心者向けPowerPoint VBAを始める際にはじめにやっておくべきセッティングと手順
  2. 【初心者向け】はじめてのPowerPoint VBAを作成して実行してみよう
  3. 【初心者向けPowerPoint VBA】オブジェクト・プロパティ・メソッドって何?
  4. PowerPoint VBAでアクティブなプレゼンテーションを取得する方法
  5. 【初心者向けPowerPoint VBA】SlidesコレクションとSlideオブジェクトを取得する
  6. PowerPoint VBAでShapeコレクションについてFor Eachループを回す方法
  7. 【初心者向けPowerPoint VBA】Shapeオブジェクトのテキストを取得する方法
  8. PowerPoint VBAでフォント設定をするFontオブジェクトを取得する
  9. PowerPoint VBAでシェイプのフォント設定をする色々なプロパティまとめ
  10. PowerPoint VBAのFor Each文とFor文によるループとその使い分けについて
タイトルとURLをコピーしました