【Excel VBA】PowerPointへの自動転記で「書式」が消える問題を解決!.Textプロパティの活用術【ソースコード公開】
毎月のレポート作成で、Excelの数値をPowerPointにコピペする作業、まだ手動でやっていますか?
「63箇所」もの転記作業も、VBAを使えば''たった1秒''で終わります。
しかし、普通に転記すると「1,000円」が「1000」になったり、「10%」が「0.1」になったりと、''Excel上の「見た目(表示形式)」が消えてしまう問題''に直面します。
今回は、その問題を解決する「.Textプロパティ」を使った魔法のコードと、実務でハマりやすいポイントを解説します。

結論:コピペ用ソースコード
まずは、解決策となるVBAコードをご覧ください。
Excelのリスト(A列:ページ番号, B列:オブジェクト名, C列:転記したい値)を読み込み、指定されたパワポのスライドへ流し込みます。
Sub パワポに文字列をセットする()
'PowerPointアプリの起動
Dim ppApp As Object
Set ppApp = CreateObject("PowerPoint.Application")
ppApp.Visible = True
'B2セルのファイルパスを開く
Dim ppPrs As Object
Set ppPrs = ppApp.Presentations.Open(Range("B2").Value)
Dim y As Long
y = 5 'データは5行目からスタート
'A列(ページ番号)がある間ループ処理
While Cells(y, "A").Value <> ""
Dim p As Long
p = Cells(y, "A").Value 'ページ番号
Dim strShpName As String
strShpName = Cells(y, "B").Value 'オブジェクト名(重要!)
'スライドとシェイプ(図形)を特定する
Dim ppShape As Object
Set ppShape = Nothing
'【重要】指定したオブジェクト名が無い場合のエラー回避
On Error Resume Next
Set ppShape = ppPrs.Slides(p).Shapes(strShpName)
On Error GoTo 0
If ppShape Is Nothing Then
'見つからなかった場合、イミディエイトウィンドウに出力
Debug.Print p & "ページ:" & strShpName & " が見つかりません"
Else
'★ここが最大のポイント!
'.Value ではなく .Text を使うことで、見た目をそのまま転記
ppShape.TextFrame.TextRange.Text = Cells(y, "C").Text
End If
y = y + 1 '次の行へ
Wend
MsgBox "転記処理が完了しました!"
End Sub
コード解説と「動画で見るべき」ポイント
このコードには、実務で躓かないための3つの重要なテクニックが含まれています。
動画の実際の動きと合わせることで、より深く理解できます。
1. 「オブジェクト名」が全ての鍵
マクロを動かすには、PowerPoint側の「図形」や「テキストボックス」の名前を知る必要があります。
「Rectangle 3」のような適当な名前のままだと、後で管理不能になります。
動画では、''「選択ウィンドウ」を使ってオブジェクト名を確認・変更する手順''を解説しています。ここを間違えるとマクロは1ミリも動きません。
- [01:49] パワポ側の準備:オブジェクト名の調べ方(https://www.youtube.com/watch?v=VUw8a-xW55w&t=109s)
2. エラーで止まらないための「保険」
実務では「指定したオブジェクト名が存在しない」ことがよくあります。その度にマクロが停止しては仕事になりません。
コード内の `On Error Resume Next` は、エラーを無視して次へ進むための重要な保険です。
動画では、''実際に名前を間違えてエラーを発生させ、回避する様子''をデバッグしながら実演しています。
- [09:28] 【重要】オブジェクトが見つからない時のエラー対処法(https://www.youtube.com/watch?v=VUw8a-xW55w&t=568s)
3. 「.Value」の罠と「.Text」の正解
今回の動画のハイライトです。
Excelのセルからデータを取得する際、通常は `.Value` を使いますが、これだと計算結果の「数値」だけが取得され、表示形式(¥マークやカンマ、単位など)が失われます。
''「.Text」プロパティを使うことで、セルの「見た目」そのままを文字列として取得''できます。この違いを知っているだけで、転記後の修正作業がゼロになります。
- [18:10] .Valueだと書式が消える現象と、.Textでの解決策(https://www.youtube.com/watch?v=VUw8a-xW55w&t=1090s)
応用テクニック:SUM関数との結合
「売上合計:1,000,000円」のように、文字と計算結果を組み合わせたい場合もありますよね?
Excel側で計算式を工夫することで、マクロ側を修正せずに柔軟に対応する方法も紹介しています。
= "売上合計:" & TEXT(SUM(D2:D10), "#,##0") & "円"
このようにExcel関数で見た目を作ってしまえば、あとはマクロの `.Text` で吸い上げるだけです。
- [34:27] 関数結果と文字を組み合わせて転記する裏技(https://www.youtube.com/watch?v=VUw8a-xW55w&t=2067s)