Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PPTファイル上の全文字列をExcelに出力するPowerPointマクロ

PPTファイル上の全文字列をExcelに出力するPowerPointマクロ

対象:PowerPoint2003, PowerPoint2007, PowerPoint2010, PowerPoint2013

PPTファイル上の全文字列をExcelに出力するPowerPointマクロ

アクティブなスライド上の、すべての文字列を取得するPowerPointマクロをご紹介しました。

実務では、プレゼンテーションファイル上の、すべての文字列を取得したいというシーンもあります。

PPTファイル上の全文字列を出力するとなると、クリップボードやイミディエイトウィンドウに出力されるより、Excelに出力されるほうが便利でしょう。

[スポンサードリンク]

PPTファイル上の全文字列をExcelに出力するサンプルマクロ

スライド番号と、シェイプの名前とともに、文字列をExcelに出力するPowerPointマクロをご紹介しておきます。

Sub プレゼンテーションファイルの全文字列をExcelに出力する()

 Dim xls As Object
 Dim i As Long
 Dim txt As String
 Dim sld As Slide
 Dim shp As Shape
 
 Set xls = CreateObject("Excel.Application")
 With xls
 
  .Visible = True
  .Workbooks.Add
  .Range("A1").Value = "スライド番号"
  .Range("B1").Value = "シェイプ名"
  .Range("C1").Value = "文字列"
  .Range("A1:C1").HorizontalAlignment = -4108 'xlCenter
  
  i = 2  
  For Each sld In ActivePresentation.Slides
   For Each shp In sld.Shapes
    If shp.HasTextFrame Then
     .Cells(i, "A").Value = sld.SlideNumber
     .Cells(i, "B").Value = shp.Name
     '垂直タブ・キャリッジリターンをExcelの改行に置換
     txt = shp.TextFrame.TextRange.Text
     txt = Replace(txt, Chr(11), vbLf)
     txt = Replace(txt, vbCr, vbLf)
     .Cells(i, "C").Value = txt
     i = i + 1
    End If
   Next shp
  Next sld
  
  .Columns("A:B").EntireColumn.AutoFit
  .Columns("C:C").ColumnWidth = 100
  .Range("A1", .Cells(i, "C")).VerticalAlignment = -4160 'xlTop
  .Range("A1", .Cells(i, "C")).WrapText = True
  
 End With
 Set xls = Nothing

End Sub

PowerPointで、VBE(Visual Basic Editor)を起動して標準モジュールを挿入して、上記のコードを貼り付けて実行すると、A列にスライド番号、B列に図形の名前、C列に文字列が出力されます。

サンプルマクロの解説

まず、Excelを起動して、
 Set xls = CreateObject("Excel.Application")
 With xls
  .Visible = True
  .Workbooks.Add
Excelを表示して、ブック追加します。

はじめて実行するときにはExcelの動く様子が見えるほうが面白いでしょうから、いきなり表示させていますが、スピードを速くしたいのなら表示は最後にするほうがいいでしょう。

A1:C1セルに見出しを作成してから、
  .Range("A1").Value = "スライド番号"
  .Range("B1").Value = "シェイプ名"
  .Range("C1").Value = "文字列"
  .Range("A1:C1").HorizontalAlignment = -4108 'xlCenter
  
2行目から、スライド番号・シェイプ名・文字列を出力を開始します。プレゼンテーションファイル内の全SlideにFor Each~Nextループを回して、
  i = 2  
  For Each sld In ActivePresentation.Slides
各スライドの全ShapeにFor Each~Nextループを回して、
   For Each shp In sld.Shapes
Shapeが文字列を含んでいた場合に、
    If shp.HasTextFrame Then
Excelに書き出しを行っています。
     .Cells(i, "A").Value = sld.SlideNumber
     .Cells(i, "B").Value = shp.Name
     txt = shp.TextFrame.TextRange.Text
     txt = Replace(txt, Chr(11), vbLf)
     txt = Replace(txt, vbCr, vbLf)
     .Cells(i, "C").Value = txt

書き出しが終わったら、見た目を整えます。
  .Columns("A:B").EntireColumn.AutoFit
  .Columns("C:C").ColumnWidth = 100
  .Range("A1", .Cells(i, "C")).VerticalAlignment = -4160 'xlTop
  .Range("A1", .Cells(i, "C")).WrapText = True

ここでは参照設定をしていない関係で、
  .Range("A1:C1").HorizontalAlignment = -4108 'xlCenter
  .Range("A1", .Cells(i, 3)).VerticalAlignment = -4160 'xlTop
と、文字列の配置を指定する処理で数値を指定していますが、参照設定すれば定数での指定も可能となります。

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

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PPTファイル上の全文字列をExcelに出力するPowerPointマクロ

「TextFrame・TextRange」の記事一覧

検索


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

.