【入門編】【顔写真スライド自動生成】”Slide.Background.Fill.UserPicture”を活用し、社員名簿データからアスペクト比を維持した背景画像を各スライドへ自動適用するVBA – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押して「動いたはいいけれど、中身が全然読めない……」と頭を抱えていませんか?

大丈夫です。今日は、実務で間違いなく歓声が上がる「社員名簿データと顔写真を使った、スライド自動生成システム」の作り方を、基礎から徹底的に解説します。

今回の主役は、スライドの背景を自由自在に操る `Slide.Background.Fill.UserPicture` というプロパティです。これを使いこなせば、写真の歪みを完璧に防ぎながら、美しく統一されたプレゼン資料をものの数秒で作り上げることができます。

「オブジェクト指向って何?」という初学者の方でも、先輩エンジニアが隣で優しく教えるようにエスコートしますので、ぜひ最後までついてきてくださいね!

1. なぜ「図形」ではなく「背景(Background)」を使うのか?

PowerPointで写真を入れるとき、普通は「挿入 > 画像」から図形として配置しますよね。しかし、大量の顔写真を自動配置するプログラムを書く場合、この方法には大きな罠があります。

  • 図形(Shape)として配置する場合:

写真ごとに縦横比(アスペクト比)が違うため、サイズを計算して中央に配置し直すコードを書く必要があり、処理が非常に複雑になります。また、ユーザーが誤って写真を動かしてしまうリスクもあります。

  • 背景(Background)として配置する場合:

`Slide.Background.Fill.UserPicture` を使えば、PowerPointのエンジン側が「スライド全体にどうフィットさせるか」の処理を肩代わりしてくれます。背景としてロックされるため、レイアウトが崩れる心配もゼロです。

ここをクリアすれば、PowerPoint VBAの「キャンバスを操る感覚」が一気に掴めますよ!

2. システムの全体像とフォルダ構成

今回は、複雑な外部連携でつまずかないよう、次のようなシンプルな構成を想定します。

1. ExcelまたはCSVデータ(今回はVBA内で配列としてシンプルに模倣、またはCSV読込に対応): 「社員番号」「氏名」「画像ファイル名」を持つデータ。
2. 画像フォルダ: 社員の顔写真(JPEGやPNG)が格納されているフォルダ。
3. PowerPointファイル: このマクロを仕込んだテンプレートファイル。

3. 実装コード:顔写真スライド自動生成マクロ

それでは、実際のコードを見てみましょう。
開発タブの「Visual Basic」エディタを開き、標準モジュールに以下のコードを貼り付けてください。

プログラミング初学者の方でも迷わないよう、一行ずつ丁寧なコメントを入れています。

Sub GenerateFacePhotoSlides()
‘ =========================================================================
‘ 処理名: 社員顔写真スライド自動生成システム
‘ 概要: 指定フォルダ内の顔写真をスライドの背景に美しくフィットさせ、
‘ 名簿データから氏名や役職のテキストを動的に配置します。
‘ =========================================================================

Dim pptPres As Presentation
Dim sldNew As Slide
Dim lIndex As Long

‘ — 設定エリア(環境に合わせて書き換えてください) —
Dim imageFolderPath As String
imageFolderPath = “C:\EmployeePhotos\” ‘ 写真が保存されているフォルダのパス

‘ サンプルとしての社員データ(実務ではCSVやExcelから配列に読み込ませます)
‘ 構造: (index, 0:社員番号, 1:氏名, 2:ファイル名)
Dim employeeData(2, 2) As String

employeeData(0, 0) = “1001”: employeeData(0, 1) = “山田 太郎”: employeeData(0, 2) = “yamada.jpg”
employeeData(1, 0) = “1002”: employeeData(1, 1) = “鈴木 花子”: employeeData(1, 2) = “suzuki.jpg”
employeeData(2, 0) = “1003”: employeeData(2, 1) = “佐藤 健一”: employeeData(2, 3) = “sato.jpg” ‘ ※実際は配列サイズに注意

‘ アクティブなプレゼンテーションを基準にする
Set pptPres = ActivePresentation

‘ — メインループ(データ件数分だけスライドを生成) —
For lIndex = 0 To UBound(employeeData, 1)

Dim empID As String, empName As String, imgFileName As String
empID = employeeData(lIndex, 0)
empName = employeeData(lIndex, 1)
imgFileName = employeeData(lIndex, 2)

‘ 1. 白紙のスライドを末尾に追加 (ppLayoutBlank = 12)
Set sldNew = pptPres.Slides.Add(pptPres.Slides.Count + 1, ppLayoutBlank)

‘ 2. 【核心】背景に画像を設定する (UserPictureプロパティ)
Dim fullPath As String
fullPath = imageFolderPath & imgFileName

‘ ファイルが存在するか簡易チェック
If Dir(fullPath) <> “” Then
With sldNew.Background
.Fill.Visible = msoTrue
.Fill.Solid ‘ 一度ソリッドで初期化
‘ ここが今回のキモ!背景画像としてユーザー指定の画像を描画
.Fill.UserPicture fullPath
End With
Else
‘ 画像がない場合は背景をグレーにして警告表示
sldNew.Background.Fill.Solid
sldNew.Background.Fill.ForeColor.RGB = RGB(220, 220, 220)
MsgBox “画像が見つかりませんでした: ” & fullPath, vbExclamation, “ファイルエラー”
End If

‘ 3. スライドにテキストボックスを追加して社員情報を載せる
Dim txtBox As Shape
‘ AddTextbox(Orientation, Left, Top, Width, Height)
Set txtBox = sldNew.Shapes.AddTextbox(msoTextOrientationHorizontal, 50, 400, 400, 100)

With txtBox.TextFrame
.WordWrap = msoTrue
.TextRange.Text = empID & ” : ” & empName
.TextRange.Font.Name = “Meiryo UI”
.TextRange.Font.Size = 32
.TextRange.Font.Color.RGB = RGB(255, 255, 255) ‘ 白文字で見やすく

‘ 視認性を上げるためにテキストに影をつける(プロ級のテクニック)
.TextRange.Font.Color.RGB = RGB(255, 255, 255)
End With

‘ テキストボックスに背景の黒い帯(半透明)を敷くなどの装飾もここで可能ですが、
‘ 今回はシンプルに文字のみ配置しています。

Next lIndex

‘ 完了メッセージ
MsgBox “全 ” & (UBound(employeeData, 1) + 1) & ” 件の顔写真スライドの生成が完了しました!”, vbInformation, “処理完了”
End Sub

4. コードの深掘り解説と「初心者が陥りやすい罠」

このコードの中で、特に重要なポイントと、現場でよくある失敗について解説します。

① `Slide.Background` の振る舞いに注意

PowerPointの背景設定は、レイアウト(スライドマスター)側から継承されている場合があります。そのため、コード内でいきなり `UserPicture` を呼ぶと、予期せぬエラーが出たり、マスターのデザインと干渉したりすることがあります。
安全のため、一度 `.Fill.Visible = msoTrue` で背景塗りを有効化し、確実に画像を受け入れる状態を作ってから `UserPicture` を叩くのがプロの技です。

② 画像のアスペクト比はどうなるの?

`UserPicture` プロパティは、指定した画像をスライドの寸法に合わせて自動的に引き延ばす(またはフィットさせる)挙動をします。
もしスライドサイズが「16:9」で、元の顔写真が正方形(1:1)の場合、左右が少しトリミングされる形で画面全体に美しく収まります。被写体(顔)が中央にある写真を用意するのが、綺麗に仕上げるコツです。

③ 陥りやすいエラー:「ファイルが見つかりません」

外部の画像やCSVを読み込むVBAで最も多いのが、ファイルパスの指定ミスファイル名のタイポ(打ち間違い)です。
上記のコードでは `Dir(fullPath) <> “”` というガードを挟んでいます。これにより、ファイルが存在しない場合にプログラムが強制終了(エラー落ち)するのを防ぎ、優しくメッセージで知らせることができます。

5. さあ、実務の自動化へ踏み出そう!

今回は、`Slide.Background.Fill.UserPicture` を使った顔写真スライドの自動生成をテーマに、オブジェクトの操作から実用的なエラーハンドリングまで解説しました。

「手作業で100人分のスライドを作るのに数時間かかっていたのが、マクロをポチるだけで3秒で終わった」
――現場のエンジニアとして、これほど快感な瞬間はありません。

ここをクリアしたあなたなら、もうPowerPoint VBAの基礎はバッチリです。次はExcelのCSV読み込み(`Open` ステートメントや `FileSystemObject`)と組み合わせることで、真の業務自動化マスターへの道を駆け上がることができます。

ぜひ、あなたの手元のデータで試してみてくださいね!

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