Home » パワーポイントマクロ・PowerPoint VBAの使い方 » 画像 » 画像の位置とサイズをExcelに出力するPowerPointマクロ

画像の位置とサイズをExcelに出力するPowerPointマクロ

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

「パワーポイント vba 画像のサイズ取得」
という検索でこのサイト・インストラクターのネタ帳へのアクセスがありました。

プレゼンテーションファイル内に存在している画像のサイズ・大きさを取得する、VBA(Visual Basic for Applications)のコードを探している方による検索です。

「画像のサイズ取得」ということですが、実務での利用シーンを考えると、サイズ・大きさだけではなく、スライド内での画像の位置も必要なのではないかという気がします。

たくさんのスライドに画像が存在しているときに、位置やサイズがスライドごとにバラバラになってしまっているので、それらを揃えるために、まずは現時点での画像の位置とサイズを調べたい、というのが実務で上がりそうな要望に思えるからです。

[スポンサードリンク]

画像の位置とサイズを取得するサンプルマクロ

まず、PowerPoint VBAで画像の位置とサイズを取得する基本を確認しましょう。

Sub アクティブスライドの画像の位置とサイズ取得()

 Const P2CM = 1 / 72 * 2.54 'Points To CentiMeters

 Dim shp As Shape

 For Each shp In _
 ActiveWindow.Selection.SlideRange.Shapes
  If shp.Type = msoPicture Then
  With shp
   MsgBox _
     "上端から" & vbTab & .Top * P2CM & vbCrLf & _
     "左端から" & vbTab & .Left * P2CM & vbCrLf & _
     "高さ " & vbTab & .Height * P2CM & vbCrLf & _
     "幅  " & vbTab & .Width * P2CM
  End With
  End If
 Next

End Sub

以上のようなマクロで、アクティブスライド上に存在する画像の位置とサイズを取得できます。

アクティブなスライドのすべてのShapeに対してFor Each~Nextループを回して、
 For Each shp In _
 ActiveWindow.Selection.SlideRange.Shapes

もしShapeが画像だったときに、
  If shp.Type = msoPicture Then

上端・左端からの距離と、高さ・幅をメッセージボックスに表示しています。
   MsgBox _
     "上端から" & vbTab & .Top * P2CM & vbCrLf & _
     "左端から" & vbTab & .Left * P2CM & vbCrLf & _
     "高さ " & vbTab & .Height * P2CM & vbCrLf & _
     "幅  " & vbTab & .Width * P2CM

Shapeオブジェクトの、
 Topプロパティで、スライドの上端からの距離
 Leftプロパティで、スライドの左端からの距離
 Heightプロパティで、高さ
 Widthプロパティで、幅
を、それぞれ取得できます。

これらのプロパティで返される値の単位はポイントなので、定数・P2CMに「1 / 72 * 2.54」という、ポイントをセンチメートルに換算するための値を定義しておいて、掛け算することで単位をcmにしています。

画像の位置とサイズをExcelに出力するPowerPointマクロ

たくさんの画像が含まれているプレゼンテーションファイルで、位置とサイズを取得したいという場合、Excelに出力するのが便利でしょう。

以下のようなマクロで、アクティブなプレゼンテーションファイルの、すべての画像の位置とサイズを、新規のExcelファイルに出力できます。

Sub 全画像の位置とサイズをExcelに出力する()

 Const P2CM = 1 / 72 * 2.54 'Points To CentiMeters

 Dim xls As Object  'Excel.Application
 Dim sld As Slide
 Dim shp As Shape
 Dim r As Long   'Excelの行番号

 Set xls = CreateObject("Excel.Application")
 With xls
  .Workbooks.Add
  .Range("A1").Value = ActivePresentation.Name
  .Range("A2").Value = "スライド番号"
  .Range("B2").Value = "上端から"
  .Range("C2").Value = "左端から"
  .Range("D2").Value = "高さ"
  .Range("E2").Value = "幅"
  .Range("A1:E2").Font.Bold = True
 End With

 r = 3
 For Each sld In ActivePresentation.Slides
  For Each shp In sld.Shapes
  If shp.Type = msoPicture Then
   With xls
     .Cells(r, "A") = sld.SlideIndex
     .Cells(r, "B") = shp.Top * P2CM
     .Cells(r, "C") = shp.Left * P2CM
     .Cells(r, "D") = shp.Height * P2CM
     .Cells(r, "E") = shp.Width * P2CM
   End With
   r = r + 1
  End If
  Next shp
 Next sld

 With xls
  .Range("A1").CurrentRegion.EntireColumn.AutoFit
  .Visible = True
 End With
 Set xls = Nothing

End Sub

プログラミングに慣れている方の場合、すべての画像の位置とサイズを2次元配列に格納しておいてから一気にExcelに書き出す、という方法を思いつくはずですが、今回のケースは配列を使って実装しようとすると考えるべきことが少々増えます。

配列を使うマクロは後日ご紹介しますが、特に配列に慣れていない方は、まず上記の、随時Excelに書き出すマクロを理解することをおすすめします。(配列を使ったマクロをご紹介しました。2015-09-07)

コードの中身は以下のとおりです。

Excelを画面に見えない状態で起動して、
 Set xls = CreateObject("Excel.Application")

新規ブックを作成して、
 With xls
  .Workbooks.Add

アクティブなPowerPointのファイル名をA1セルに入力し、
  .Range("A1").Value = ActivePresentation.Name

A2:E2セルに見出しを作成します。
  .Range("A2").Value = "スライド番号"
  .Range("B2").Value = "上端から"
  .Range("C2").Value = "左端から"
  .Range("D2").Value = "高さ"
  .Range("E2").Value = "幅"
  .Range("A1:E2").Font.Bold = True

見出しを作成したら、アクティブなプレゼンテーションの全Slideに対するFor Each~Nextループを回して、
 For Each sld In ActivePresentation.Slides

各スライドの全Shapeに対してFor Nextループを回して、
  For Each shp In sld.Shapes

Shapeが画像だったときに、
   If shp.Type = msoPicture Then

スライド番号・上端からの距離・左端からの距離・高さ・幅を書き出して、
   With xls
     .Cells(r, "A") = sld.SlideIndex
     .Cells(r, "B") = shp.Top * P2CM
     .Cells(r, "C") = shp.Left * P2CM
     .Cells(r, "D") = shp.Height * P2CM
     .Cells(r, "E") = shp.Width * P2CM
   End With

行番号を表す変数・rをインクリメントしています。
   r = r + 1

全Slideの全Shapeに対するループが終わったら、
  Next shp
 Next sld

Excelに書き出した一覧の列幅を調整して、
 With xls
  .Range("A1").CurrentRegion.EntireColumn.AutoFit

Excelを表示して終了です。
  .Visible = True
 End With
 Set xls = Nothing

次回、2次元配列を使って、同じことを行うマクロをご紹介します。配列を使ったマクロをご紹介しました。2015-09-07)

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » 画像 » 画像の位置とサイズをExcelに出力するPowerPointマクロ

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

.