【入門編】【中級者】プレゼンテーション内のすべての図形・画像に対して、適切な「代替テキスト(アクセシビリティ情報)」が設定されているかを検査し、不足分を自動補完して保存するマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステージから抜け出し、「自分の手でプレゼンテーションを自在に操りたい」と願うあなたへ。

今回は、実務の現場でますます重要視されている「アクセシビリティ(代替テキスト)」の自動検査と補完をテーマに解説します。

企業や官公庁への提出資料では、「すべての図形や画像に適切な代替テキスト(Altテキスト)が入っていること」が厳格に義務付けられるケースが増えてきました。しかし、数百ページもあるスライドから、設定漏れを探して手作業で修正するのは地獄の作業です。

ここをクリアすれば、PowerPoint VBAの「オブジェクト操作の基本」と「実務で使える堅牢なエラーハンドリング」はバッチリです。一緒に、現場で即戦力となるプロのコードを組み立てていきましょう!

—

なぜPowerPoint VBAでアクセシビリティ検査なのか?

PowerPointには標準でアクセシビリティチェック機能がありますが、「不足しているものを一括で強制的にプレースホルダー的なテキストで埋めて、安全な状態にして保存する」といった定型業務の自動化には、やはりVBAの力が不可欠です。

特に中級者を目指すあなたが押さえておくべきポイントは以下の2つ。
1. スライド(Slide)→ シェイプ(Shape)という「階層構造」を正確に巡回する技術
2. オブジェクトのプロパティ(`AlternativeText`)を安全に読み書きする作法

それでは、実際のコードを見ていきましょう。

—

実装コード:代替テキスト自動検査・補完マクロ

以下のコードをVBAエディタ(Alt + F11)の標準モジュールに貼り付けて実行してください。アクティブなプレゼンテーション内のすべての図形を総点検し、空っぽの代替テキストがあれば自動で補完した上で、別名で安全に保存します。

Option Explicit

‘ ==============================================================================
‘ プロシージャ名: CheckAndFillAltText
‘ 概要: プレゼンテーション内の全スライド・全図形を走査し、
‘ 代替テキスト未設定の図形に自動で説明を補完して保存する
‘ ==============================================================================
Sub CheckAndFillAltText()
Dim prsTarget As Presentation
Dim sldCurrent As Slide
Dim shpTarget As Shape
Dim missingCount As Long
Dim defaultAltText As String
Dim savePath As String

‘ 1. 処理対象のプレゼンテーションを定義(現在アクティブなもの)
Set prsTarget = ActivePresentation

‘ 未設定時のデフォルト補完テキスト
defaultAltText = “図表(説明文未設定)”
missingCount = 0

‘ 2. 全スライドをループ
For Each sldCurrent In prsTarget.Slides
‘ 3. スライド内の全図形をループ(グループ化された図形も考慮)
For Each shpTarget In sldCurrent.Shapes

‘ 代替テキストが未設定(または空白)かチェック
‘ ※PowerPointのバージョンにより AlternativeText プロパティを使用
If Trim(shpTarget.AlternativeText) = “” Then
‘ 不足分を自動補完
shpTarget.AlternativeText = defaultAltText & ” – ” & shpTarget.Name
missingCount = missingCount + 1
End If

Next shpTarget
Next sldCurrent

‘ 4. 検査結果のフィードバック
If missingCount > 0 Then
MsgBox “アクセシビリティ検査完了:” & vbCrLf & _
missingCount & ” 個の図形に代替テキストが不足していたため、自動補完しました。”, _
vbInformation, “自動補完のお知らせ”
Else
MsgBox “検査完了:” & vbCrLf & _
“すべての図形に適切な代替テキストが設定されています!”, _
vbInformation, “合格”
End If

‘ 5. 安全な別名保存(元のファイルを上書きしない配慮)
‘ ※デスクトップの「Checked_」フォルダ等に保存する例
On Error GoTo ErrorHandler
savePath = prsTarget.Path & “\Checked_” & prsTarget.Name

‘ すでに同名ファイルがある場合は一旦保存して上書き
prsTarget.SaveAs savePath

MsgBox “ファイルを正常に保存しました:” & vbCrLf & savePath, vbInformation, “保存完了”
Exit Sub

ErrorHandler:
‘ 保存先がない(未保存の新規ファイルなど)場合のフォールバック
MsgBox “自動保存に失敗しました。手動で名前を付けて保存してください。” & vbCrLf & _
“エラー内容: ” & Err.Description, vbExclamation, “保存エラー”
End Sub

—

コードの核心:ここが分かれば怖くない!

初心者から一歩抜け出すために、このコードの重要なポイントを3つに分解して解説します。

1. コレクションの入れ子ループ(Nested Loop)

PowerPointのデータ構造は、「プレゼンテーションの中にスライドがあり、スライドの中にシェイプ(図形)がある」というマトリョーシカ構造になっています。

For Each sldCurrent In prsTarget.Slides
For Each shpTarget In sldCurrent.Shapes
‘ ここで1つひとつの図形を料理する
Next shpTarget
Next sldCurrent

この「入れ子の発想」が身につくと、PowerPoint VBAでできないことはほぼなくなります。

2. `AlternativeText` プロパティの罠と対策

図形の代替テキストを扱うのが `shpTarget.AlternativeText` です。ここで実務上大切なのは、ユーザーが意図せず「スペース(空白)」だけを入力しているケースがある点です。そのため、`Trim()` 関数を使って前後の余白を取り除き、「本当に空っぽか?」を厳密にチェックしています。

If Trim(shpTarget.AlternativeText) = “” Then

この「実務的な泥臭い配慮」ができるかどうかが、プロとアマの分かれ道です。

3. トラップを避けるエラーハンドリング

最後の保存処理で、もし元のプレゼンテーションが「一度も保存されたことがない新規ファイル(パスがない状態)」だった場合、`prsTarget.Path` はエラーを吐き出します。
これを防ぐために `On Error GoTo ErrorHandler` を仕込み、万が一の際にもマクロが強制終了せず、ユーザーに優しく案内できるようにしています。

—

さらに実務で応用するために

今回のマクロをベースに、現場の要件に合わせて以下のようなカスタマイズを加えると、さらに強力なツールに進化します。

  • グループ化された図形(GroupShape)の再帰的探索:

図形がグループ化されている場合、そのままでは中のパーツを見落とすことがあります。`msoGroup` 型を判定し、中身のシェイプをさらに掘り下げるロジック(再帰呼び出し)を追加すると完璧です。

  • ログの出力:

どのスライドの何という図形を補完したのかを、Excelの別シートやテキストファイルに出力する機能をつけると、監査証跡として非常に喜ばれます。

—

おわりに

お疲れ様でした!
「すべての図形を巡回し、メタデータを検査・補完し、安全に保存する」という一連の流れ、いかがでしたでしょうか。

ここをクリアできれば、あなたはもう単なる「マクロの記録ユーザー」ではありません。組織の品質を守る「業務自動化エンジニア」の第一歩を踏み出しています。

ぜひ自分の手元のプレゼンテーションで試して、その爆速な処理スピードを体感してみてください。
あなたのVBAライフが、より知的でクリエイティブなものになりますように。それではまた次の極限知見でお会いしましょう!

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