最終調査日:2026年10月3日。
Microsoftの公式資料と練習ファイルの構造・描画結果を確認していますが、編集部のWindows版PowerPoint本体での操作確認は未実施です。
PowerPointのマクロは、最初に資料を変更しない小さな処理で実行経路を確認し、その後で画像やスライドを操作する処理へ進みます。
旧記事の画像置換は元画像を先に削除し、リボンは関数名と引数が一致していなかったため、そのまま使う手順を取り下げました。
共通の練習ファイルZIPをダウンロードして展開してください。
マクロなしの.pptxが3本、比率の異なる練習画像が2枚、マクロとリボン設定のテキスト、コピーを作るPythonスクリプトを同梱しています。
業務資料を使う前に、練習ファイルを別名コピーして試します。
6つの用途で、先に確認すること
| 用途 | 確認と試し方 |
|---|---|
| 図形の固定 | 端末のPowerPoint版にある標準のロック機能と、解除方法を確認 |
| グリッドへのスナップ | 現在の資料のSnapToGridが対象。変更前の状態を控える |
| グリッドの表示 | Application.DisplayGridLinesはアプリ側の状態。資料内の線とは別 |
| 複数資料の結合 | 元の書式保持/テーマ統一、入力順、結合後の枚数を確認 |
| 画像を1枚ずつ挿入 | 2枚/スライドの旧コードを使わず、新規スライドに1枚ずつ挿入 |
| 画像の置換 | スライドを複製し、1枚の画像を選んで標準の[図の変更]で確認 |
画像の一括処理は、1枚の読み込み、縦横比、配置、最後の画像までの枚数を確かめてから自動化します。
元画像の削除後に新しい画像を追加する順番では、読み込みに失敗したときに元画像だけ失われます。
練習画像を使い、元のスライドを残した複製側で試します。
資料を変更しないVBAで実行経路を確かめる
自分で空の練習資料を作り、[名前を付けて保存]でPowerPointマクロ有効プレゼンテーション(.pptm)にします。
Windows版のVBAエディターをAlt+F11で開き、[挿入]→[標準モジュール]に次のコードを貼り付けます。
ZIP内のCgmDemo.basは同じコードのテキストです。
Option Explicit
Public Sub CgmHello()
MsgBox "CG-method practice: macro reached.", vbInformation, "CG-method"
End Sub
Public Sub CgmRibbonHello(ByVal control As Office.IRibbonControl)
CgmHello
End Sub
[デバッグ]→[VBAProjectのコンパイル]でエラーがないかを確認します。
Alt+F8でCgmHelloを選び、実行できる環境なら確認用メッセージが表示されることを確かめます。
Office.IRibbonControlが見つからない場合は、VBAの参照設定とOfficeライブラリを確認し、不明な参照を追加して解決したことにしないでください。
このVBAは本文・スライド・画像を変更せず、外部ファイルも送信先も使いません。
編集部ではVBAコンパイルとPowerPoint内のメッセージ表示をまだ確認していないため、この段階の合否を実機で確認してから次へ進みます。
リボン用の関数名と引数を合わせる
リボンのボタンには、通常の引数なしマクロをそのまま割り当てるのではなく、IRibbonControlを受け取るコールバックを用意します。
次のXMLはCgmRibbonHelloを呼び、その中からCgmHelloを実行します。
onActionの名前はVBA側と一致させます。
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="CgmPracticeTab" label="CG-method Practice">
<group id="CgmPracticeGroup" label="Practice">
<button id="CgmHelloButton" label="Hello" onAction="CgmRibbonHello" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
既存の関係ファイルを壊さず、新しいコピーに追加する
自分で保存したpractice.pptm、同梱のcustomUI.xml、apply_custom_ui.pyを同じ作業フォルダーに置きます。
Pythonが使える場合は、そのフォルダーで次のコマンドを実行するとpractice-ribbon.pptmという新しいコピーを作ります。
入力ファイルと同名の出力や、すでに存在する出力は拒否します。
python apply_custom_ui.py practice.pptm practice-ribbon.pptm customUI.xml
スクリプトは既存の_rels/.relsを読み、既存の関係を残してリボンへの関係を1件追加します。
既存リボン、パッケージ署名、VBA署名のある資料は処理しません。
元のvbaProject.binなど、変更対象外のファイルはバイト単位で保持します。
旧記事のように短い.rels全文で元ファイルを置き換える方法は使いません。
配布ZIPに完成した.pptmや.ppamは含めていません。
スクリプトのコピー保全・拒否条件は模擬パッケージで確認していますが、PowerPointでのリボン表示とVBA実行を確認した結果ではありません。
自作のpractice-ribbon.pptmを開き、[CG-method Practice]の[Hello]で同じメッセージが出ることを確認します。
アドイン化と失敗時の切り分け
最初は.pptmの文書内リボンで確認し、動作した自作コードだけを.ppamとして保存する段階へ進みます。
.ppamの読み込み方法はPowerPointの版やアドインの種類で異なり、Web用のOfficeアドインとは別です。
本稿の実機確認が済むまでは、完成アドインとして配布・常駐登録しません。
| 症状 | 確認箇所 |
|---|---|
| マクロが一覧にない | Public Subの引数なしCgmHelloを標準モジュールに置いたか、.pptmで保存したか |
| リボンが表示されない | コピー側を開いたか、customUIへの関係とXML名前空間が正しいか |
| リボンは見えるが実行できない | onActionの名前、IRibbonControlの引数、コンパイル結果を確認 |
| セキュリティでブロックされる | 入手元と端末の管理方針を確認。全マクロ有効化や保護の無効化で回避しない |
戻すときはpractice-ribbon.pptmを閉じ、変更していないpractice.pptmを開きます。
アドインを試した場合は、そのアドインだけの読み込みを解除します。
既存のアドインや資料全体を削除して直す方法は使いません。
構成とコールバックはMicrosoftのRibbon XML説明およびIRibbonControlの資料を参照しています。
セキュリティ表示についてはインターネット由来マクロのブロックも確認してください。
次の作業に進む
| やりたいこと | 最初に読む記事 |
|---|---|
| 画像を書き出す | 画像解像度と300dpiの設定 |
| 背景の比率を合わせる | 画像に合わせたスライドサイズ |
| 文字の設定を再利用する | フォントとテンプレート |
| 資料をまとめる | 書式を選んで結合する |
関連資料の扱い
以下の関連記事には別の版や旧実装の説明が含まれる場合があります。
手順を試す際は、元ファイルを残した練習用コピーと本稿の確認項目を使ってください。






