Excelで表を作って別の文書に貼り付けたい、ってことはよくありますよね!


そういうときは、同じMS OfficeならコピペするとExcel形式が残せますし、それはそれで無駄に重かったりするときは「形式を選択して貼り付け」にして図として貼り付けるなんてのもよくやる手です。


Excelでない場合も、一旦Excel上で図としてコピペしてから貼り付けすれば事足ります。



でも・・・




ごくごく稀に、


「図の形式(例えばPNGやJPG)のファイルが欲しい」


ことはありませんか?


例えば、ウェブ系でこのブログみたいに「ファイルとしてはアップロードできるけど、コピペはできない」みたいなケースです。




だったら、

できるようにしてやろうじゃあーりませんか。






・・・って、図をファイルとして取り出すこと自体は結構簡単なんです。Office2007くらいから拡張子の一番最後にxがつくようになりましたよね。例えば

  • Wordなら.doc→.docx
  • Excelなら.xls→.xlsx
  • Powerpointなら.ppt→.pptx

これ、実はOfficeがXMLをベースにしたファイル形式になってて(わかんない方は理解しなくて大丈夫です)、実は複数のファイルをZIPで圧縮してるだけなんです。

なので、画像や動画もリソースファイルとしてZIPの中にそのまんま入ってます。


「パワーポイントの動画付スライドはもらったんだけど、動画の元のファイルってもらえません?」という質問がよくあると思うんですが、これは元のパワポが「douga.pptx」だとすると、そのファイル名を「douga.zip」にしてみてください。警告メッセージは出ますが、気にせず変更してZIPを開くと、中に動画があります^^。


この記事で、役に立つ情報はここまで。
(´∀`*)







さてとまぁそんなわけで、Excelのブックにある画像もZIPを開くと画像としてExcelが保存してくれているので、それを取り出せばいいわけです。


そして、それをぜーんぶVBAで自動化しちゃえばいいわけです(違。


流れはこんな感じ。

  1. Excelのセルを選択した状態でマクロを動かす
  2. 選択範囲を「形式を選択して貼り付け」で図として貼り付ける
    →この段階ではWindowsメタファイルで使いにくい
  3. もう一度、この図を形式を選択して貼り付けで、PNG形式で貼り付ける
  4. このファイルを保存する
  5. 保存したファイルの拡張子をZIPに変える
  6. ZIPの中から画像ファイルを見つける
  7. 画像ファイルを然るべき場所(例えば元のExcelブックの場所)に移す
  8. (証拠隠滅)ZIPファイルを削除する
  9. (証拠隠滅)元のExcelブックで貼り付けた二つの画像を削除する

やり方がわかってしまえば結構簡単です。ただ、たった1枚の画像ファイルを掃き出すにしてはめっちゃ工数が多いです。



そんなわけで、同マクロ(こちらがマクロのリンク)を搭載したExcelブックがこちらになります。


Private Sub SaveRangeAsPng(ByVal rng As Range)


が範囲を渡すと画像を掃き出すマクロの実態で、それを使って選択範囲の画像を出すものをSub Test()として実装しました。VBAが分かる人なら自分のプロジェクトに使うこともできますし、このExcelブックのみでも自分のブックからこいつにコピペするだけで画像を掃き出すことができます。



是非、お使い下さいませ!
(誰もつかわねーよ、というツッコミはなしの方向で)