プロが教える店舗&オフィスのセキュリティ対策術

Excelの2つのファイル(東西、南北)から、PowerPointの1つのファイル(「一覧」)へ画像を貼り付ける作業がよくあるのですが、手順を簡素化するアイディアは有りませんでしょうか?
貼り付ける目的は、画像が重たい(Excel30000行分x10系列)ので、軽くするため&東西と南北を並べて一覧にするためで、

グラフをPowerPointに「形式を選択して貼り付け>拡張メタファイル」し、
→それをすぐ切り取って、PowerPointに「形式を選択して貼り付け>png」します

が(1回目の変換ではpngが選べない)、この手順は業務命令で指示されているので、変えられません。(私自身は二度変換する意味自体を良くわかっていませんが、それはこの質問と直接関わりありません)

これをグラフ40枚分行うのですが、自動化するか(マクロの組み方は私は知りません)、pngへ一括変換・一発変換する方法はありませんか?(現状、1枚当たりに相当な時間がかかっています。)
XPでExcel2003で、PowerPointも2003だと思います。

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございます(短いですが#3へのお礼にまとめさせていただきます。)

お礼日時:2007/08/30 20:10

追伸


どうしても PNG でなければダメなようなら、その旨補足して下さい。
別の方法で回答します。

この回答への補足

本題からそれ過ぎるのも良くないので、この質問ページは今夜24時以降に締め切る予定です、と前置きします。

>> PP のグラフィックは美しくありません。

全く同感です(それほどモノを知っているわけではありませんが)。でもPNGってこんなものかな、と思っていたのですが、むしろPPの性質に依るところが大きいのですね。メタファイルについても不満を持っていました。特に、グラフ内のテキストボックスが大きさ・位置関係が変わってしまうのを意のままに制御できず、もどかしいです。しかし、メタファイル形式はメタファイル形式で利点もあるようだから、おっしゃるように適切に使いわけることが肝要みたいですね。長く答えていただいたおかげで関心を持つきっかけになりました。


VBAについて、もマクロについて、も勤め先の他人まかせにしていて、学ぼうという姿勢に欠けていました。実は私はMSDOSは3年、日本語BASICは5年勉強して、プログラミングも多数したことがあり、TurboPASCALは3日間、JAVAは3週間独学したことがあります。しかし、BASICの頃の思いこみが強過ぎて、行番号のない言語、特にJAVAの「オブジェクト指向」や「クラス」という概念が頭に入ってきませんでした。
#2で書いていただいたプログラム(これも「マクロ」と呼べば良いのでしょうか?)は、言語こそ知りませんが、初めて「理解できる」VBAでした。とてもきれいなプログラムを書く人ですね。ありがとうございます。
(お礼へ続く)

補足日時:2007/08/30 21:35
    • good
    • 0
この回答へのお礼

(補足の続き)
これを読み解くと、VBAを自分でも書いてみようかな、という自信がわいてきました。なるほど、「こんなことできたらいいな」は「自分で書いてみる」という前向き姿勢が大切なのですね。「Excelは不便だなぁ。こんなことできないかなぁ。なんだできないのか」と思うことが実はあったのですが、逆にExcelは「やってみたいこと」をたいてい実現できる、自由度の高いアプリなのかも知れない、と思い直しました。
VBAが用意され、Office内や、社外品とも互換性が高いこと自体、Microsoftは私の思っていた以上に「やる」企業なのかも知れません。WikipediaのVBA項目に

「Visual Basic for Applications を使用することで、ExcelやAccessなどを使用した定型業務を自動化することができる。また、ユーザー独自のフォームを作成することができ、様々なプラグインを組み込むことでアプリケーションの機能をカスタマイズすることなども可能である。」

と書いてありましたが、まさにその通りですね。
#2で書いていただいたプログラムを、私自身で解釈し改良できるように勉強して、使ってみよう、と思いました。これもチンプンカンプンでなく「私にもできそう」というヒントを与えてくださったKenKenSPさんのおかげです。ありがとうございました。

もしよろしければ、
・VBAは(他の言語と比べて)とっつき易いか。極端な話、中学校でも教えられるくらいユニバーサルか。
・VBAを学び始めた時は、どんなものを参考に(2000円くらいの本?)し、どんなプログラムから始めたか
などを続報で教えてください。

お礼日時:2007/08/30 21:36

> この手順は業務命令で指示されているので、変えられません。



変えられないものに対して新たな方法を回答したとしても解決に
ならないというか..その辺はどうなんです?

回答としては、VBA を使えば省力化は可能です。

> 画像が重たい(Excel30000行分x10系列)ので、軽くする
> ため&東西と南北を並べて一覧にするためで

Excel30000行分x10系列とは?
東西と南北とは?

あなたの業務を知らない人がほとんどなのですから、現状がよく
わかるように具体的に説明して下さい。
VBA を使えば Excel ファイル内にある全ての グラフ・写真を
PNG ファイルで直接書き出すことも、それを PowerPoint に
自動で貼り付けていくことも可能です。
が、現状がわからないことにはどうしようもない。

> 二度変換する意味

標準機能で Excel では グラフ-->PNG 変換ができないからだと
思いますが、本当の意図は不明です、、というか謎ですね。

そもそも「軽く」という点を一番重視するのであれば、グラフなら
拡張メタファイル(以下 EMF)で貼り付けたままにすべきです。

 # ラスタ画像とベクタ画像の違いを調べて下さい

EMF で貼り付けたグラフを わざわざ PNG で貼り付け直すという
ことはファイルサイズを不必要に巨大化させ、画質も劣化するの
ですが。。。

ペイントなどからコピペで貼り付けた写真などなら効果はあると
思います。これは、Bitmap で貼り付いているものを PNG に変換
することでファイルサイズが小さくなる可能性があるからです。

この回答への補足

あまり長くならないように、とはしょりましたが、はしょり方がわかりにくかったようですね。ま、このご回答で知りたいことの多くは見えてきました。
東西とか南北とかいうのはあくまでも例えですが、
東の部屋について気温、湿度、二酸化炭素濃度、・・・など10系列のデータをとっており、それがエクセル3万行分くらいのデータ量なので、グラフを描画させると、時間がかかる、ということを表現したかったのです。しかもグラフが東の部屋だけで10枚あります。
西の部屋、北の部屋、南の部屋についても同様のデータを取りグラフを作っていますが、東西南北を全て一つのファイルに納めると大きいので、「東西」「南北」という2つのファイルに分けているだけのことです。

この2つのエクセルファイルは開く・閉じるだけでもかなり重たいので、グラフだけをパッと見られるように「一覧」というパワーポイントファイルを作っているわけですが、
1つ1つのグラフを、コピって貼ってまた切り取って変換して貼って、という作業が時間がかかるので、
「業務指示からは逸脱しない」範囲で、多少比較的早く、グラフを移す方法はないか、を聞きたかったのです。
私のイメージでは、エクセル上で、グラフ10~20枚をPNGに一気に変換できればなぁ、と淡く期待していたのですが。もちろん、現状たったの1枚のグラフでもめちゃくちゃ時間がかかっているので(散布図で10色の線が入り乱れている)、20枚一気に、なんてスーパーマンみたいなことはありえない(メモリ的にも)、てことはわかっています。

自動で解決する方法があることはわかりましたし、
わざわざPNGにするのはデメリットがある、ということも上司に言ってみようかと思います。役に立ちました。

補足日時:2007/08/30 12:47
    • good
    • 0
この回答へのお礼

ありがとうございます(短いですが#3へのお礼にまとめさせていただきます。)

お礼日時:2007/08/30 20:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています