アクティブなスライド上の、すべての文字列を取得するPowerPointマクロをご紹介しました。
実務では、プレゼンテーションファイル上の、すべての文字列を取得したいというシーンもあります。
PPTファイル上の全文字列を出力するとなると、クリップボードやイミディエイトウィンドウに出力されるより、Excelに出力されるほうが便利でしょう。
PPTファイル上の全文字列をExcelに出力するサンプルマクロ
スライド番号と、シェイプの名前とともに、文字列をExcelに出力するPowerPointマクロをご紹介しておきます。
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
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
と、文字列の配置を指定する処理で数値を指定していますが、参照設定すれば定数での指定も可能となります。
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PPTファイル上の全文字列をExcelに出力するPowerPointマクロ