エクセルファイルに記載しているデータをパワーポイントに自動で転記したい!というニーズがありました。
ワードのような純粋な差し込み印刷はないわけなのですが、ほとんど同じような機能を実装したツールを作ってみました!
動画でも解説していますので、ご覧ください~^^
目次
やりたいこと
以下のようなエクセルファイルがあります。
ここでは、上記4名の個人毎のパワーポイントスライドを作っていきたいと思います。
こんな感じです!
差し込みパワポのサンプルファイルダウンロード
以下のファイルをダウンロードしてご利用ください。
差し込みパワポツールの利用方法
1.テンプレートファイルを準備する
差し込む先のテンプレートファイルを準備します。多くの方は、この時点で転記したいパワーポイントは持っていると思います。ご自身が使われている転記したいと思うパワーポイントファイルを選択していただければOKです。
ここでは、以下のようなレイアウトのファイルを準備しています。G列・・という部分については今のところ気にしなくても大丈夫です。
2.ExcelのDataシートに必要な情報を入力する
エクセルファイルのDataシートには、必要な情報を入力しておきます。ここにはパワーポイントで使う以上の情報を入力しても全く問題ありません。使うデータをたくさん入れておきましょう。
一つポイントがあります。表の中には、ファイル名(もしくはFile name)というヘッダーを作ってください。このデータをファイル名としてデータを作成します。今回は氏名と同じ名前でファイルを作成していきます。
3.各ヘッダーと入力する文字列を指定する
ここがポイントです!!まずは以下をご覧ください。
このツールの仕組みですが、パワポの中のテキストボックスや図形から、上記変換対象文字列を実際の列のデータに置換する という処理を行っています。
こんな感じです。
つまり、Excel側の設定はあまり必要なく、パワーポイントの方のテキストボックスをうまく調整していくだけで、簡単でデータを挿入することができるという仕組みです。
4.テンプレートファイルを格納先を指定する
セルF7,F9にテンプレートファイルのファイルパスと出力先のフォルダの指定する項目があります。
F7(Template file)には、1.で作成したテンプレートファイルを入力します。F9(Folder to export)には作成したファイルの格納先を指定します。今回のケースでは、4ファイル作成されて、その結果が出力先に格納されるということになります。
5.Runボタンをクリックする
ここまでで設定作業は完了です。以下のボタンをクリックし、実行してみましょう。
出力先には以下のようにエクセルファイルに記載されている行数分のパワポのファイルを作成することができました!
さいごに
パワポの資料を作成する。。ということ、結構あるのですが、ワードの差し込み印刷のように簡単に挿入することができれば、定例作業を簡略化することができると思います。ぜひご利用くださいませ!!
ご紹介いただいているツールを大変興味をもって拝見しました。
これらのツールを利用させていただくときに、私的利用、アカデミック(研究)用途利用、商用利用のどこまで認めておられますでしょうか?
本ツールについては利用制限はございません。
ただし、本ツールをご利用し、万が一損害が発生した場合には、責任を負うことは出来かねますのでご了承ください。
問題ないようでしたらコードの改変含めてご自由にご利用ください!
ありがとうございます。感謝もうしあげます。
大変便利なツールだと感じました。
一つご質問ですが、今回は複数のパワポのファイルとして出力されていますが、1つのパワポのファイルの中に、複数スライドとして出力させるバージョンはありますでしょうか?もしくは、コードを編集すればできるのでしょうか?
よろしくお願いいたします。
keiです。
現在の仕様ではできかねます。。
今後、パワポのスライドをマージするツールを作ってみようと思いますアドバイスありがとうございます。
初めまして。とっても役に立つツールの公開、本当にありがとうございます。
このVBAコードをmacで使えるようにするにはどうすればいいでしょうか?
chat gptにmacで使えるように修正してと依頼したところ
tell application “Microsoft PowerPoint”
activate
set pptPresentation to make new presentation
set endRow to (count of rows of sheet 1 of active workbook) – 1
set fileNameColumn to 2 — B列を指定
set startLoopRow to 8 — ループ開始行を指定
set endLoopRow to 66 — ループ終了行を指定
set templateFile to “path/to/template.pptx”
set saveFolderPath to “path/to/save/folder/”
repeat with cnt from 2 to endRow
set slide to make new slide at end of pptPresentation with properties {layout:slide layout blank}
repeat with replaceCnt from startLoopRow to endLoopRow
set findText to value of cell replaceCnt of row 7 of sheet 1 of active workbook
set replaceText to value of cell replaceCnt of row cnt of sheet 1 of active workbook
tell slide
repeat with shapeIndex from 1 to count of shapes
set oShp to shape shapeIndex
set oTxtRng to text range of oShp
set oTmpRng to oTxtRng.replace(findText, replaceText)
repeat while oTmpRng is not missing value
set oTxtRng to characters ((start character of oTmpRng) + (length of oTmpRng) + 1) to end of oTxtRng of oShp
set oTmpRng to oTxtRng.replace(findText, replaceText)
end repeat
end repeat
end tell
end repeat
save pptPresentation in (saveFolderPath & (value of cell fileNameColumn of row cnt of sheet 1 of active workbook) & “.pptx”)
close pptPresentation
end repeat
end tell
と言われました。
貼り付けたところ、 “Microsoft PowerPoint” がエラーですと表示されます。
申し訳ありません。
MacBookは動作しないことを確認しています。また、私自身検証環境を、持っていないため、MacBook用のアドバイスは難しいです。。申し訳ありません。。
VBA初心者です。使いやすいツールを共有いただきありがとうございます。 質問なのですが、G列H列とせずに、H列だけにしたいのですが、その場合はどうやってコードを書き換えればいいか教えていただけないでしょうか?またD列生年月日とE列性別をパワポに追加したいのですが、追加テキストボックスに紐づけるようコードはどのように書き換えれば動作するか教えていただけないでしょうか?
よろしくお願いいたします。
このツールは基本的にVBAのコードを書き換える必要はありません。
作られているパワポのテンプレートのG列H列と記載されているG列の文字列を削除するだけです!
はじめまして。
ネットでいろいろ探しててここに辿り着きました。ランボタンで実行して、パワーポイントがちかちか切り替わってエクセルデータを読み込んでるようなのですが、、格納先にファイルが残らないんです。。。゚(゚´Д`゚)゚。
パスも貼り付けて指定したのですが、、悩。。。
出力先のパスが間違っているのかもしれません。
お問い合わせページから設定されたツールの送付をおねがいします。
私も同じ問題が発生しました。フォルダのパスも正しいことを確認しました。どのように解決すればよいでしょうか?
事象を再現できないのですが、お問い合わせページからツールを送付いただくことは可能でしょうか?
同じく出力したファイルが保存できません。
セキュリティ関連で引っかかっているのでしょうか?(出力したPPが読み取り専用になって消えてしまいます)PPを閉じないマクロコードでもよいのかなと思うのですが、不勉強でコードの書き換えができないのでご教示いただけますと幸いです。
もしよければお問い合わせ窓口から利用しているファイルを送付いただけませんか?
ご連絡をよくいただくのですが、どなたもファイルをお送りいただけないので事象が確認できず。。
場合によってはteams繋いで画面見せていただいたほうがすぐ解決できるのかなと思います。