Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Shapesコレクション・Shapeオブジェクト » 指定範囲内の指定されたTypeのShapeの数を返すPowerPointのFunctionプロシージャ

指定範囲内の指定されたTypeのShapeの数を返すPowerPointのFunctionプロシージャ

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

スライドごとの、画像の位置とサイズをExcelに出力するPowerPointマクロをご紹介しました。

この記事の中で、指定したTypeのShapeの数を返すFunctionプロシージャもご紹介しています。

Excelに一覧を出力するマクロがメインテーマの記事でしたから、プレゼンテーションファイル全体から、指定したTypeのShapeの数を返すだけのFunctionプロシージャとしました。ですが、このFunctionプロシージャが使われるようなシーンを考えると、もう少し機能を持たせておいてもいいかもしれません。

スライドの範囲を指定すると、その範囲内で指定したTypeのShapeの数を返すFunctionプロシージャもニーズがありそうに思えます。

[スポンサードリンク]

指定範囲内の指定されたTypeのShapeの数を返すFunctionプロシージャ

既にご紹介Functionプロシージャを、そんな形に修正してみました。

''指定範囲内の指定されたTypeのShapeの数を返す
Function CountSpecifiedShapes( _
 ByVal prs As Presentation, _
 ByVal shpType As MsoShapeType, _
 Optional ByVal firstSlideId As Long, _
 Optional ByVal lastSlideId As Long) As Long

 Dim shp As Shape
 Dim n As Long, i As Long
 Dim sldCnt As Long:  sldCnt = prs.Slides.Count

 If firstSlideId = 0 Then firstSlideId = 1
 If lastSlideId = 0 Then lastSlideId = sldCnt

 If _
  firstSlideId < 0 Or _
  firstSlideId > lastSlideId Or _
  lastSlideId > sldCnt Then
    Err.Raise Number:=5
    Exit Function
 End If

 n = 0
 For i = firstSlideId To lastSlideId
  For Each shp In prs.Slides(i).Shapes
  If shp.Type = shpType Then
   n = n + 1
  End If
  Next shp
 Next i

 CountSpecifiedShapes = n

End Function

上記のプロシージャは以下のような形で利用します。
Sub sample()
 On Error GoTo ErrHndl
 MsgBox CountSpecifiedShapes(Presentations(1), msoPicture, 3, 10)
 Exit Sub
ErrHndl:
 MsgBox Err.Description
End Sub

Functionプロシージャの解説

引数は4つ指定できます。
調べたいPresentationオブジェクトと、
 ByVal prs As Presentation, _
Shapeの種別を指定するMsoShapeType列挙に定義された定数、
 ByVal shpType As MsoShapeType, _
の2つは既にご紹介しているプロシージャと同じで、
調べたい先頭のスライド番号、
 Optional ByVal firstSlideId As Long, _
調べたい最後のスライド番号、
 Optional ByVal lastSlideId As Long) As Long
が新たに設けた引数です。Optionalキーワードを使うことで、これらfirstSlideId・lastSlideIdは省略可能になっています。

プロシージャの中では以下のような処理を行っています。

指定されたプレゼンテーションファイルのスライドの枚数を変数・sldCntに格納して、
 Dim sldCnt As Long:  sldCnt = prs.Slides.Count
引数・firstSlideIdが省略されていたときは「1」を、
 If firstSlideId = 0 Then firstSlideId = 1
引数・lastSlideIdが省略されていたときはスライドの枚数を、
 If lastSlideId = 0 Then lastSlideId = sldCnt
それぞれ代入しておきます。

firstSlideId・lastSlideIdに、不正な値が指定された場合は実行時エラーを上げるようにしています。
 If _
  firstSlideId < 0 Or _
  firstSlideId > lastSlideId Or _
  lastSlideId > sldCnt Then
    Err.Raise Number:=5
    Exit Function
 End If
firstSlideIdがマイナスの値だったとき、firstSlideIdのほうがlastSlideIdより大きいとき、lastSlideIdがスライドの枚数より大きいときに、エラーとなるようにしています。エラー番号は「プロシージャの呼び出し、または引数が不正です。」というエラーメッセージの「5」を上げています。

メインの処理では、指定されたスライドに対するFor Nextループの中で、各スライド内の全Shapeに対してFor Each~Nextループを回して、
 For i = firstSlideId To lastSlideId
  For Each shp In prs.Slides(i).Shapes

Shapeの種別が、引数・shpTypeに指定されたものと同じだったときに、変数・nをインクリメントして、
  If shp.Type = shpType Then
   n = n + 1
  End If
ループを抜けたら、変数・nの値を返しています。
  Next shp
 Next i
 CountSpecifiedShapes = n

関連語句
VBA, Visual Basic for Applications
[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Shapesコレクション・Shapeオブジェクト » 指定範囲内の指定されたTypeのShapeの数を返すPowerPointのFunctionプロシージャ

「Shapesコレクション・Shapeオブジェクト」の記事一覧

検索


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

.