PR

【VBA】指定セルやセル範囲を図としてコピーする

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、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

タイトルとURLをコピーしました