【入門編】【中級者】スライド内に散在するすべてのフローチャートや図形テキストを一括抽出し、レビュー用のテキストファイルとして構造化出力・保存するマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

【PowerPoint VBA】散在する図解テキストを「資産」に変える。一括抽出エンジンの構築術

こんにちは。業務自動化の世界へようこそ。
日々、何十枚ものスライドに埋もれた「図形内のテキスト」を探して、コピペに時間を浪費していませんか?

PowerPointはビジュアル重視のツールですが、中身は巨大な「オブジェクトの階層構造」です。これを力技で触るのではなく、VBAというメスを使って「データ」として取り出す。これができれば、あなたのプレゼン資料はただの「見栄えの良い紙芝居」から、再利用可能な「情報のデータベース」へと進化します。

今回は、スライド内のあらゆる図形テキストを構造化して抽出する、実践的なエンジンを構築しましょう。

—

1. なぜ「力技」ではいけないのか?

初学者が陥りやすい罠は、全スライドをループさせて`Slide.Shapes`を適当に叩くことです。しかし、PowerPointには「グループ化」という壁があります。

  • 単純なテキストボックス:`Shape.TextFrame`に直接アクセス可能。
  • グループ化された図形:グループの中にまた図形があり、その中にテキストがある。

この「再帰構造」を理解していないと、図形の中に隠れたテキストを取りこぼします。今回は、この階層を深く潜り込んでテキストを拾い上げる「再帰的アプローチ」を採用します。

—

2. 実装:テキスト抽出エンジン

以下のコードをVBAエディタ(Alt + F11)に貼り付けてください。標準モジュールに配置するのが鉄則です。

Option Explicit

‘ 抽出したテキストを格納するためのファイルパス
Const OUTPUT_PATH As String = “C:\Temp\SlideTextReview.txt”

Sub ExportAllShapeText()
Dim fso As Object, ts As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set ts = fso.CreateTextFile(OUTPUT_PATH, True)

Dim sld As Slide
Dim shp As Shape

‘ 全スライドをループ
For Each sld In ActivePresentation.Slides
ts.WriteLine “— Slide ” & sld.SlideIndex & ” —”

‘ 各スライド内の全シェイプを走査
For Each shp In sld.Shapes
Call ExtractTextRecursive(shp, ts)
Next shp
ts.WriteLine vbCrLf
Next sld

ts.Close
MsgBox “抽出完了しました!” & vbCrLf & OUTPUT_PATH, vbInformation
End Sub

‘ 再帰的に図形内部を探索するプロシージャ
Private Sub ExtractTextRecursive(shp As Shape, ts As Object)
‘ 1. テキストを持っているか判定
If shp.HasTextFrame Then
If shp.TextFrame.HasText Then
ts.WriteLine “ShapeID ” & shp.Id & “: ” & shp.TextFrame.TextRange.Text
End If
End If

‘ 2. グループ化されている場合、内部をさらに探索
If shp.Type = msoGroup Then
Dim subShp As Shape
For Each subShp In shp.GroupItems
Call ExtractTextRecursive(subShp, ts) ‘ 自分自身を呼び出す(再帰)
Next subShp
End If
End Sub

—

3. コードの心臓部を読み解く

このコードのポイントは2点です。

① 再帰処理(Recursive)の魔法

`ExtractTextRecursive` というプロシージャの中で、自分自身を呼び出しています。これがなぜ重要かというと、グループの中にグループがある「入れ子構造」にも完全に対応できるからです。プログラミングの基礎でありながら、実務で最も強力な武器となります。

② `HasTextFrame` による安全弁

すべての図形がテキストを持っているわけではありません。線や画像に対して無理やりテキストを取得しようとすると、VBAは即座にエラーを吐いて停止します。`HasTextFrame` で「君はテキストを持てる器か?」と確認してから操作する。これが、堅牢なマクロを書くための第一歩です。

—

4. 陥りやすいエラーと対策

  • 「オブジェクトが見つかりません」エラー:

スライドショー実行中や、特定の図形が削除された瞬間に起こることがあります。基本は「編集モード」で実行してください。

  • 権限エラー:

`OUTPUT_PATH` に指定したフォルダに書き込み権限がないと落ちます。`C:\Temp` など、確実に保存できる場所を指定しましょう。

  • 文字化け:

VBAの標準出力はUTF-8ではない場合があります。もし日本語が文字化けする場合は、`ADODB.Stream` オブジェクトを使って文字コードを明示的に指定して保存する手法へアップグレードしましょう。

—

最後に:ここをクリアすれば、あなたはもう「脱・初心者」

このマクロを使いこなせれば、次は「スライドの特定の場所(タイトルやフッター)だけを抽出してExcelへ転記する」といった応用がすぐに見えてくるはずです。

PowerPointのオブジェクトモデルは、一度理解してしまえば非常に論理的で美しい世界です。手作業で1時間かかる作業を、わずか0.1秒のロジックに置き換える。その快感を、ぜひ味わってみてください。

何か詰まったら、いつでも戻ってきてくださいね。あなたの自動化の旅を、これからも応援しています。

タイトルとURLをコピーしました