こんにちは、Ryoです。
VBA処理としてはデータ読み書きなどが主になりますが、アウトプットの際に図(画像)として出力したいことも状況によって発生します。図としてコピーするにはCopyPictureメソッドを使いますので、その説明と省略可能な引数であるAppearance、Formatを使用した場合の差異などを書いてみたいと思います。
1.サンプル概要
シート上(Sheet1)に下の画像の様な表があり、その表を図としてコピーします。
図としてコピーし、表の下に貼り付けます。
以下の貼り付けた図はCopyPictureメソッドで引数を省略したものです。
この通り図として貼り付けられます。
では次にサンプルコードなどを書いていきます。
2.サンプルコード
先ずは上述のサンプル概要で実行したものは以下になります。
Sub Sample5() '表の範囲を指定し図としてコピーする Range(Cells(3, 2), Cells(8, 5)).CopyPicture 'アクティブシート上のセルB11以降に貼付け実施 ActiveSheet.Paste Cells(11, 2) End Sub
コピーしたい範囲を指定し、CopyPictureを使用します。
オブジェクト.CopyPicture(Appearance,Format)
構文としてこのようになりますが、引数のAppearance,Formatは省略が可能です。
省略しない場合の指定としては以下になります。
Appearance:=xlPrinter・・・印刷イメージの画像
Appearance:=xlScreen・・・PCスクリーン上の画像「既定値」
Format:=xlPicture・・・Draw画像(.png、.wmf、.mix)「既定値」
Format:=xlBitmap・・・ビットマップ(.bmp、.jpg、.gif)
「既定値」としたものは省略した際の設定になるものです。
これらを指定して記述する場合は以下です。
Range(Cells(3, 2), Cells(8, 5)).CopyPicture _ Appearance:=xlScreen, Format:=xlPicture
次に引数指定の違いで画像に差異があるか確認してみます。
◆xlScreen / xlPrinterの差異(xlPicture)
Format:=xlPictureは共通させた状態で、差異の有無を確認してみます。
元にしている表がシンプルなこともあるとは思いますが、見た目上では特に差異を感じませんのでxlPictureはデフォルトのxlScreenで問題なさそうです。
◆xlScreen / xlPrinterの差異(xlBitmap)
次にFormat:=xlBitmapを共通させた状態で、差異の有無を確認してみます。
xlScreenとxlBitmapを指定したものが左側下部の画像になりますが、罫線部分が消えます。
又、xlPrinterとxlBitmapでは実行時エラーとなってしまうようですね。
何故エラーになるのか現時点では把握出来ていませんが、この組合せは良くないようです。
この確認した結果を見る限り、Appearance:=xlScreen / xlPrinterはFormatがxlPictureであれば特に差異が感じられないこと、Bitmapではスクリーン上の画像とやや異なる点を考えれば、「敢えて引数は指定しない」のも良いかと個人的には思います。
3.まとめ
図としてコピーするにはオブジェクト.CopyPictureで済みますので簡単に実行出来ますので、方法を知っておくと何かと使えるケースが多いのではないかと思います。引数については本サンプルで確認した上での個人的見解なので、ご参考までに。
以上、指定セルやセル範囲を図としてコピーする方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo