【脱・手作業】言語混在スライドを自動最適化!PowerPoint VBAで構築する「多言語ドキュメント」自動化術
こんにちは。業務自動化の現場で数々の泥臭い自動化をこなしてきたアーキテクトです。
グローバル企業でのプレゼン資料作成、苦労していませんか?
「英語のスライドには英語のフォントを」「日本語のスライドにはMSゴシックを」。これを手作業で繰り返すのは、エンジニアとして最も避けたい「非効率の極み」です。
今日は、「言語設定を判定し、フォントとスペルチェックを自動で適用する」という、実務で喉から手が出るほど欲しい自動化ツールを、VBAの核心部分から解説していきます。
—
1. なぜ「手動」ではいけないのか?
PowerPointには、スライド単位で「言語設定」を保持するプロパティがあります。しかし、多くのユーザーはここを意識しません。結果として、「日本語のフォント設定のまま英語が混ざり、文字間隔がガタガタになる」「スペルチェックが日本語設定のまま働き、英語のタイポが見逃される」といった事故が起きます。
VBAでこれを制御するのは、単なる時短ではありません。「ドキュメントの品質をコードで担保する」という、プロフェッショナルなアプローチなのです。
—
2. 核心に迫る:言語判定とフォント適用のロジック
今回作成するツールは、以下のステップで動作します。
1. スライドを全ループする
2. 図形(テキストボックス)の中身を解析する
3. 日本語が含まれているか判定する
4. 判定結果に基づき、言語IDと推奨フォントを適用する
実装コード:SmartMultilingualOptimizer
このコードを標準モジュールに貼り付けてください。
Option Explicit
‘ 伝説のエンジニアが贈る、言語自動最適化モジュール
Sub OptimizePresentationLanguage()
Dim sld As Slide
Dim shp As Shape
‘ プログレスバーの代わりにステータスバーを利用(ユーザーへの配慮)
Application.StatusBar = “最適化を開始します…”
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
‘ テキストが含まれる図形のみを対象にする
If shp.HasTextFrame Then
If shp.TextFrame.HasText Then
Call ApplyLanguageSettings(shp)
End If
End If
Next shp
Next sld
Application.StatusBar = “完了しました。美しい資料の出来上がりです。”
End Sub
Private Sub ApplyLanguageSettings(shp As Shape)
Dim txtRange As TextRange
Set txtRange = shp.TextFrame.TextRange
‘ 日本語が含まれているか簡易判定(全角文字の有無)
‘ ※中級者へのヒント:複雑な正規表現よりも、まずは「全角の有無」で分岐させるのが堅牢です
If IsContainsJapanese(txtRange.Text) Then
‘ 日本語向け設定
txtRange.LanguageID = msoLanguageIDJapanese
txtRange.Font.Name = “游ゴシック”
Else
‘ 英語向け設定
txtRange.LanguageID = msoLanguageIDEnglishUS
txtRange.Font.Name = “Segoe UI”
End If
End Sub
‘ 全角文字(日本語)が含まれているかチェックする関数
Private Function IsContainsJapanese(str As String) As Boolean
Dim i As Long
For i = 1 To Len(str)
‘ ASCW関数で文字コードを確認(全角は256より大きい)
If AscW(Mid(str, i, 1)) > 256 Then
IsContainsJapanese = True
Exit Function
End If
Next i
IsContainsJapanese = False
End Function
—
3. コードのポイントを解説
- `shp.HasTextFrame` による安全装置:
PowerPointには、画像やグループ化された図形など、テキストを持たないオブジェクトが混在します。これらにアクセスしようとするとエラーが発生するため、必ず判定を入れるのが「玄人」の流儀です。
- `AscW`関数の活用:
文字判定に正規表現を使うのも手ですが、VBAで最も軽量かつ確実に日本語を判定できるのは、文字コードの値を確認する方法です。パフォーマンスを落とさず、かつシンプルに保つ。これがメンテナンス性の鍵です。
- `Application.StatusBar`:
マクロ実行中、PowerPointはしばしば「フリーズした?」と勘違いされることがあります。ステータスバーを更新して「今、何をしているか」を伝えるのは、ユーザーへの思いやり(UIデザイン)です。
—
4. 陥りやすいエラーと回避策
1. 「オブジェクトが設定されていません」エラー:
テキストボックス内に空の文字列が含まれている場合に発生しがちです。`If shp.TextFrame.HasText Then` というガードを必ず設けてください。
2. フォントが反映されない:
`LanguageID` を設定しただけでは、既存のフォントは変わりません。必ず `Font.Name` をセットで更新してください。
—
最後に:ここをクリアすれば、あなたはもう脱・初心者です
このマクロを理解し、自分の環境に合わせてカスタマイズできるようになったら、あなたはもう「マクロの記録」に頼る段階を卒業しています。
次は、これに「PDFへの一括書き出し」や「指定フォルダへの自動保存」を組み合わせることで、完全自動化パイプラインが完成します。
自動化は、単なるコード書きではありません。「本来人間がやるべきクリエイティブな仕事に時間を割くための、エンジニアの尊い戦い」です。ぜひ、このコードをあなたの武器に加えてください。
何か詰まったら、いつでも聞いてくださいね。応援しています!
