【入門編】【中級者】スライド内のすべての図形や画像に対して、アクセシビリティ上の「代替テキスト」が設定されているかを検査し、不足している要素へ自動補完を行ってから保存する品質管理マクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは。開発現場の最前線で、日々数々の自動化システムを設計しているチーフアーキテクトです。

PowerPointの資料作り、本当にお疲れ様です。
「やっとの思いで仕上げたプレゼン資料、いざ社内ニッチな品質チェックに回したら『すべての図形や画像に代替テキスト(Altテキスト)を入れてください』と差し戻されてしまった……」
そんな絶望的な経験、ありませんか?

アクセシビリティの向上や社内ガバナンスの観点から、ビジュアル要素への代替テキスト設定はもはや避けて通れない必須要件となりつつあります。しかし、何十枚、何百枚とあるスライドの中から、未設定の図形を一つひとつ目視で探し出すのは、エンジニアの仕事ではありません。それはコンピューターの仕事です。

今回は、スライド内のすべての図形や画像を網羅的に巡回し、代替テキストが欠落している要素を検知して自動補完、さらに安全に保存まで完了させる「品質管理オートメーション・マクロ」をあなたに伝授します。

ここをクリアすれば、PowerPoint VBAのDOM(ドキュメント構造)を自在に操る基本はバッチリです。一緒にマスターしていきましょう!

—

なぜ「代替テキスト」の自動化でつまずくのか?

PowerPoint VBAの世界へ一歩踏み出した中級者の方や、「マクロの記録」を卒業したばかりの方が、まず最初にハマる罠があります。それは、「グループ化された図形」と「プレースホルダー(タイトルの枠など)」の存在です。

画面上ではただの「四角形」に見えても、プログラムから見ると以下の構造的な違いがあります。

1. 通常の図形 (`Shape`): 素直に代替テキストプロパティを持っている。
2. プレースホルダー (`PlaceholderFormat`): タイトルや本文の枠。これ自体はテキストエリアですが、内部に画像が含まれることもあります。
3. グループ化された図形 (`GroupItems`): コンテナの中にさらに小さな図形がいくつもネスト(入れ子)されているため、親だけをチェックしても中の画像を見落としてしまう。

この構造を無視してコードを書くと、「画像があるのにエラーになる」「未設定がすり抜ける」という不具合が起きます。
今回のマクロでは、この「ネスト構造(入れ子)」を再帰的(あるいはループ処理)に完全攻略するプロフェッショナルな設計でお届けします。

—

実装コード:アクセシビリティ・ガードマン マクロ

以下のコードを、PowerPointのVBAエディタ(`Alt + F11`)を開き、標準モジュールに貼り付けてください。

‘ ==============================================================================
‘ 担当アーキテクト特製:スライド品質管理&代替テキスト自動補完システム
‘ 概要: すべてのスライドの図形・画像を走査し、代替テキストの有無をチェック。
‘ 未設定の要素には自動でデフォルト値を補完し、安全に保存します。
‘ ==============================================================================
Sub AuditAndFixAccessibility()
Dim sld As Slide
Dim shp As Shape
Dim fixedCount As Long
Dim defaultAltText As String

‘ 未設定の場合に自動入力するデフォルトテキストの定義
defaultAltText = “視覚的要素(要詳細確認)”
fixedCount = 0

‘ ユーザーへの処理開始アナウンス
If MsgBox(“アクティブなプレゼンテーションの代替テキスト検査および自動補完を開始します。”, vbQuestion + vbOKCancel, “品質管理チェッカー”) = vbCancel Then
Exit Sub
End If

‘ プレゼンテーション内の全スライドをループ
For Each sld In ActivePresentation.Slides
‘ スライド内の全図形をループ(グループ化対応のためサブルーチンへ委譲)
For Each shp In sld.Shapes
Call ProcessShape(shp, fixedCount, defaultAltText)
Next shp
Next sld

‘ 変更を上書き保存
On Error GoTo SaveError
ActivePresentation.Save
On Error GoTo 0

‘ 完了レポート
MsgBox “検査と補完が完了しました!” & vbCrLf & _
“自動補完された要素数: ” & fixedCount & ” 箇所” & vbCrLf & _
“ファイルは正常に保存されました。”, vbInformation, “処理完了”
Exit Sub

SaveError:
MsgBox “ファイルの保存中にエラーが発生しました。” & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “保存エラー”
End Sub

‘ ==============================================================================
‘ サブルーチン:図形の再帰的走査と代替テキストのチェック・補完
‘ 解説: グループ化された図形(Nested Shapes)にも対応するため、自身を呼び出します。
‘ ==============================================================================
Private Sub ProcessShape(targetShp As Shape, ByRef count As Long, defaultText As String)
On Error Resume Next ‘ プロパティを持たない特殊なオブジェクト(ガイド等)のエラーを回避

‘ 1. グループ化されている図形の場合、中の要素を一つずつバラして再帰処理する
If targetShp.Type = msoGroup Then
Dim innerShp As Shape
For Each innerShp In targetShp.GroupItems
Call ProcessShape(innerShp, count, defaultText)
Next innerShp
Exit Sub
End If

‘ 2. テキストボックスやプレースホルダーなど、代替テキストが不要な純粋なテキスト要素を除外する場合の判定
‘ (※必要に応じて条件を調整してください。今回は画像やアイコン、図形を対象とします)
If targetShp.Type <> msoPlaceholder Then

‘ 代替テキスト(AlternativeTextプロパティ)が空欄かどうかを判定
If Trim(targetShp.AlternativeText) = “” Then
‘ 未設定の場合はデフォルト値を代入
targetShp.AlternativeText = defaultText
count = count + 1
End If

End If

On Error GoTo 0
End Sub

—

コードの核心:ここがプロの技

このコードが単なる「おもちゃのマクロ」と違うポイントを、エンジニアの視点から解説します。

1. グループ化(`msoGroup`)の完全攻略

スライド上で複数の図形を「グループ化」している場合、PowerPoint VBAでは親の `Shape` オブジェクトとして扱われます。しかし、中身の個別パーツには親のプロパティが直接及びません。
このコードでは、`targetShp.Type = msoGroup` を検知した瞬間に、内部の `GroupItems` を取り出して自分自身(`ProcessShape`)を再度呼び出す「再帰処理(リカージョン)」という高度なアルゴリズムを採用しています。これにより、何重に入れ子になった複雑な図形構造でも、一切の塗り残しを防ぎます。

2. エラーハンドリングの要塞化

PowerPointのスライドには、ユーザーには見えない「隠しオブジェクト(レイアウトガイドや特殊なプレースホルダーなど)」が存在することがあります。これらは `AlternativeText` プロパティを持たず、コードからアクセスすると容赦なく実行時エラー(エラー438など)で止まります。
これを防ぐために `On Error Resume Next` を配置し、例外を美しくいなすことで、最後まで止まることなく一気に全スライドを駆け抜ける強靭さを実現しています。

—

導入と運用のワンポイント・アドバイス

1. セキュリティセンターの設定
初めてマクロを実行する際、「マクロが無効化されました」というセキュリティ警告が出た場合は、「ファイル」>「オプション」>「トラストセンター」>「マクロの設定」から、「すべてのマクロを有効にする(推奨されません。危険なコードの場合は注意)」または信頼できる場所へファイルを配置してください。
2. デフォルト値のカスタマイズ
コード内の `defaultAltText = “視覚的要素(要詳細確認)”` の部分は、社内のレギュレーションに合わせて書き換えてください。「社内共有資料」といった文言にするのも手です。

—

おわりに

いかがでしょうか?
PowerPoint VBAは、オブジェクトの階層構造(Application -> Presentation -> Slide -> Shape)さえ掴んでしまえば、手作業では何時間もかかる退屈な作業を、わずかコンマ数秒で終わらせる最強の武器になります。

「ここをクリアすれば、PowerPoint VBAの基本はバッチリですよ!」

日々の面倒な品質チェックから解放され、あなた本来のクリエイティブなプレゼン構成やストーリー作りに集中する時間を手に入れてください。それでは、次の自動化の現場でお会いしましょう。

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