- ベストアンサー
ExcelからPowerPointへ画像を貼り付ける作業を簡素化
- Excelの2つのファイルから、PowerPointの1つのファイルへ画像を貼り付ける作業を簡素化する方法はありますか?
- 貼り付ける目的は、画像の軽量化と情報の整理です。
- 現在の手順では時間がかかっているため、自動化や一括変換する方法があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足ありがとうございました。 具体的に書いていただき、回答するに励みになりました。 どうも PP のグラフィックは美しくありません。Excel や Word と比較してそう思います。 経験からアドバイスすると Excel のグラフを最もきれいに、かつ軽量にPP に貼り付けるには、 1. Excel で次の VBA を実行し、グラフをピクチャー(ここでは拡張 メタファイル)としてコピーする ActiveChart.CopyPicture xlScreen, xlPicture 2. PowerPoint にそのままで貼り付け という手順が良いと思います。PP 側で「形式を選んで・・・」で拡張メタファイルにしても画質が明らかに落ちてます。 # Excel2003、2007 ではわかりませんが。 下記は、アクティブブック内にある全てのグラフを PP に貼り付けます。 もともとのデータが大きいみたいですから、ある程度時間はかかるでしょう。とりあえず、お試しを。 ' // 標準モジュール Sub XLグラフをPPに貼り付け() ' // グラフウインドウとなっているものは対象外です。 Dim ppApp As Object ' PowerPoint.Application Dim ppPst As Object ' PowerPoint.Presentation Dim ppSld As Object ' PowerPoint.Slide Dim Sh As Worksheet Dim Obj As Object Dim iCount As Integer Dim sngPosOffset As Single Dim i As Long ' // PowerPoint(以下PP) 定数 Const ppLayoutBlank = 12 Const ppPasteEnhancedMetafile = 2 ' // PP 起動 On Error Resume Next Set ppApp = CreateObject("PowerPoint.Application") If ppApp Is Nothing Then Err.Raise 1000, , "PowerPoint cannot be started." On Error GoTo Err_ ' // PP を表示する ppApp.Visible = True ' // PP 新規プレゼンテーション作成 Set ppPst = ppApp.Presentations.Add(WithWindow:=True) ' // PP 新規スライド挿入 Set ppSld = ppPst.Slides.Add(Index:=1, _ Layout:=ppLayoutBlank) ' // XL 処理グラフ数カウンタ iCount = 0 ' // PP グラフ貼り付け位置初期値 sngPosOffset = 0 ' // XL グラフの貼り付け開始 For Each Sh In ActiveWorkbook.Worksheets For i = 1 To Sh.ChartObjects.Count ' // XL グラフを Picture 形式でコピー Sh.ChartObjects(i).CopyPicture xlScreen, xlPicture ' // PP 貼り付け ppSld.Shapes.Paste ' // PP グラフ位置・サイズ補正 With ppSld.Shapes(i) .LockAspectRatio = msoTrue .Top = sngPosOffset .Left = sngPosOffset .Height = .Height * 0.5 ' // 50%縮小 End With ' // PP 次の貼り付け位置オフセット sngPosOffset = sngPosOffset + 20 ' // XL 処理グラフ数カウンタ iCount = iCount + 1 Next i Next Sh If iCount = 0 Then ppApp.Quit MsgBox CStr(iCount) & "枚のグラフを処理しました", vbInformation Bye_: On Error GoTo 0 Set ppApp = Nothing: Set ppPst = Nothing Set ppSld = Nothing: Set Sh = Nothing Exit Sub Err_: MsgBox Err.Description, vbCritical Resume Bye_ End Sub
その他の回答 (2)
- KenKen_SP
- ベストアンサー率62% (785/1258)
追伸 どうしても PNG でなければダメなようなら、その旨補足して下さい。 別の方法で回答します。
お礼
(補足の続き) これを読み解くと、VBAを自分でも書いてみようかな、という自信がわいてきました。なるほど、「こんなことできたらいいな」は「自分で書いてみる」という前向き姿勢が大切なのですね。「Excelは不便だなぁ。こんなことできないかなぁ。なんだできないのか」と思うことが実はあったのですが、逆にExcelは「やってみたいこと」をたいてい実現できる、自由度の高いアプリなのかも知れない、と思い直しました。 VBAが用意され、Office内や、社外品とも互換性が高いこと自体、Microsoftは私の思っていた以上に「やる」企業なのかも知れません。WikipediaのVBA項目に 「Visual Basic for Applications を使用することで、ExcelやAccessなどを使用した定型業務を自動化することができる。また、ユーザー独自のフォームを作成することができ、様々なプラグインを組み込むことでアプリケーションの機能をカスタマイズすることなども可能である。」 と書いてありましたが、まさにその通りですね。 #2で書いていただいたプログラムを、私自身で解釈し改良できるように勉強して、使ってみよう、と思いました。これもチンプンカンプンでなく「私にもできそう」というヒントを与えてくださったKenKenSPさんのおかげです。ありがとうございました。 もしよろしければ、 ・VBAは(他の言語と比べて)とっつき易いか。極端な話、中学校でも教えられるくらいユニバーサルか。 ・VBAを学び始めた時は、どんなものを参考に(2000円くらいの本?)し、どんなプログラムから始めたか などを続報で教えてください。
補足
本題からそれ過ぎるのも良くないので、この質問ページは今夜24時以降に締め切る予定です、と前置きします。 >> PP のグラフィックは美しくありません。 全く同感です(それほどモノを知っているわけではありませんが)。でもPNGってこんなものかな、と思っていたのですが、むしろPPの性質に依るところが大きいのですね。メタファイルについても不満を持っていました。特に、グラフ内のテキストボックスが大きさ・位置関係が変わってしまうのを意のままに制御できず、もどかしいです。しかし、メタファイル形式はメタファイル形式で利点もあるようだから、おっしゃるように適切に使いわけることが肝要みたいですね。長く答えていただいたおかげで関心を持つきっかけになりました。 VBAについて、もマクロについて、も勤め先の他人まかせにしていて、学ぼうという姿勢に欠けていました。実は私はMSDOSは3年、日本語BASICは5年勉強して、プログラミングも多数したことがあり、TurboPASCALは3日間、JAVAは3週間独学したことがあります。しかし、BASICの頃の思いこみが強過ぎて、行番号のない言語、特にJAVAの「オブジェクト指向」や「クラス」という概念が頭に入ってきませんでした。 #2で書いていただいたプログラム(これも「マクロ」と呼べば良いのでしょうか?)は、言語こそ知りませんが、初めて「理解できる」VBAでした。とてもきれいなプログラムを書く人ですね。ありがとうございます。 (お礼へ続く)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> この手順は業務命令で指示されているので、変えられません。 変えられないものに対して新たな方法を回答したとしても解決に ならないというか..その辺はどうなんです? 回答としては、VBA を使えば省力化は可能です。 > 画像が重たい(Excel30000行分x10系列)ので、軽くする > ため&東西と南北を並べて一覧にするためで Excel30000行分x10系列とは? 東西と南北とは? あなたの業務を知らない人がほとんどなのですから、現状がよく わかるように具体的に説明して下さい。 VBA を使えば Excel ファイル内にある全ての グラフ・写真を PNG ファイルで直接書き出すことも、それを PowerPoint に 自動で貼り付けていくことも可能です。 が、現状がわからないことにはどうしようもない。 > 二度変換する意味 標準機能で Excel では グラフ-->PNG 変換ができないからだと 思いますが、本当の意図は不明です、、というか謎ですね。 そもそも「軽く」という点を一番重視するのであれば、グラフなら 拡張メタファイル(以下 EMF)で貼り付けたままにすべきです。 # ラスタ画像とベクタ画像の違いを調べて下さい EMF で貼り付けたグラフを わざわざ PNG で貼り付け直すという ことはファイルサイズを不必要に巨大化させ、画質も劣化するの ですが。。。 ペイントなどからコピペで貼り付けた写真などなら効果はあると 思います。これは、Bitmap で貼り付いているものを PNG に変換 することでファイルサイズが小さくなる可能性があるからです。
お礼
ありがとうございます(短いですが#3へのお礼にまとめさせていただきます。)
補足
あまり長くならないように、とはしょりましたが、はしょり方がわかりにくかったようですね。ま、このご回答で知りたいことの多くは見えてきました。 東西とか南北とかいうのはあくまでも例えですが、 東の部屋について気温、湿度、二酸化炭素濃度、・・・など10系列のデータをとっており、それがエクセル3万行分くらいのデータ量なので、グラフを描画させると、時間がかかる、ということを表現したかったのです。しかもグラフが東の部屋だけで10枚あります。 西の部屋、北の部屋、南の部屋についても同様のデータを取りグラフを作っていますが、東西南北を全て一つのファイルに納めると大きいので、「東西」「南北」という2つのファイルに分けているだけのことです。 この2つのエクセルファイルは開く・閉じるだけでもかなり重たいので、グラフだけをパッと見られるように「一覧」というパワーポイントファイルを作っているわけですが、 1つ1つのグラフを、コピって貼ってまた切り取って変換して貼って、という作業が時間がかかるので、 「業務指示からは逸脱しない」範囲で、多少比較的早く、グラフを移す方法はないか、を聞きたかったのです。 私のイメージでは、エクセル上で、グラフ10~20枚をPNGに一気に変換できればなぁ、と淡く期待していたのですが。もちろん、現状たったの1枚のグラフでもめちゃくちゃ時間がかかっているので(散布図で10色の線が入り乱れている)、20枚一気に、なんてスーパーマンみたいなことはありえない(メモリ的にも)、てことはわかっています。 自動で解決する方法があることはわかりましたし、 わざわざPNGにするのはデメリットがある、ということも上司に言ってみようかと思います。役に立ちました。
お礼
ありがとうございます(短いですが#3へのお礼にまとめさせていただきます。)