Excel VBA セル範囲を画像オブジェクトにするCopyPictureメソッド

スポンサーリンク

CopyPicture【コピーピクチャー】メソッド

指定したセル範囲を画像としてコピーし、クリップボードに保存するには、Range【レンジ】オブジェクトのCopyPicture【コピーピクチャー】メソッドを使用します。

CopyPicture【コピーピクチャー】メソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.CopyPicture( [Appearance, Format] )

  • オブジェクト(必須)
    画像としてコピーするセル範囲をRange【レンジ】オブジェクトで指定します。
  • Appearance【アピアランス】(省略可)
    画像の形式をXlPictureAppearance 列挙型の定数で指定します。

    XlPictureAppearance 列挙型
    定数内容
    xlScreen1画面の表示に近い形でコピーされます。(既定値)
    xlPrinter2印刷する時と同じ形式でコピーされます。
  • Format【フォーマット】(省略可)
    画像の形式をXlCopyPictureFormat 列挙型の定数で指定します。

    XlCopyPictureFormat 列挙型
    定数内容
    xlPicture-4147ベクター形式でコピーされます。(既定値)
    xlBitmap2ビットマップ形式でコピーされます。

    ※通常は、セル範囲のデータは画像を既定値のベクター形式でコピーします。ベクター形式は画像データの値を保存して描写するので点で表現されるビットマップと違い、画像を拡大しても画像がぼやけません。また、ファイルのサイズを低く抑えることができます。


A1セル~D8セルの表を画像でコピーしてF1セルに貼り付けるコードと解説

Sub 画像()
Range("A1:D8").CopyPicture
Range("F1").PasteSpecial
End Sub
2行目【Range(“A1:D8”).Copy Picture】
Range【レンジ】オブジェクトのCopyPicture【コピーピクチャー】メソッドを使用して、指定したA1セルからD8セルのセル範囲を画像としてコピーし、クリップボードに格納します。


3行目【Range(“F1”).PasteSpecial】
Range【レンジ】オブジェクトのPasteSpecialメソッドを使用してクリップボードに格納された画像を指定したF1セルを起点として貼り付けます。


実行結果


画像としてコピーしたセル範囲を画像として書き出す方法

セル範囲を画像データとしてコピーしクリップボードに保管して、セルに貼り付ける方法を説明しましたが、作成した画像データを他のアプリケーション等で使用したい場合があると思います。

その場合は、画像データを書き出すことが必要になりますが、画像データをそのまま書き出す仕組みはありません。そこで、画像として書き出すことのできるグラフを表すChart【チャート】オブジェクトのExport【エクスポート】メソッドを利用します。

空のグラフを作成して、その上に画像としてコピーし、クリップボードに保管した画像を貼り付けて書き出します。

Export【エクスポート】メソッド

グラフを画像として書き出すには、Chart【チャート】オブジェクトのExport【エクスポート】メソッドを使用します。

Export【エクスポート】メソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.Export( FileName, [FilterName, Interactive] )

  • オブジェクト(必須)
    グラフを表すChart【チャート】オブジェクトを指定します。
  • FileName【ファイルネーム】(必須)
    出力するファイル名を指定します。出力する場所(パス)と出力形式(拡張子)も指定します。
  • FilterName【フィルターネーム】(省略可)
    レジストリに表示されるグラフィック フィルターの言語非依存の名前を指定します。
  • Interactive【インタラクティブ】(省略可)
    True を指定するとフィルター固有のオプションを含むダイアログ ボックスが表示されます。
    False を指定するとフィルターの既定値が使用されます。既定値は False です。

画像としてコピーしたセル範囲を画像として書き出すコードと解説

Sub 画像作成()
 MsgBox "ブックを任意の場所に一旦保存して" & vbCrLf & _
"画像ファイルを書き出すパス(場所)を確定してください。"
   With Application.FileDialog(msoFileDialogSaveAs)
     .InitialFileName = ThisWorkbook.Path & "\"
     .FilterIndex = 2
   If .Show = -1 Then .Execute
   End With
   With Range("A1:D8")
     .CopyPicture
   ActiveSheet.ChartObjects.Add(0, 0, .Width, .Height).Name = "貼付用"
   End With
   Application.OnTime Now + TimeValue("00:00:01"), "書き出し"
End Sub
Private Sub 書き出し()
   With ActiveSheet.ChartObjects("貼付用")
      .Chart.Paste
      .Chart.Export ThisWorkbook.Path & "\画像.png"
      .Delete
   End With
   MsgBox ThisWorkbook.Path & "にpngファイルを出力しました。"
   Application.Quit
   Application.DisplayAlerts = False
   ThisWorkbook.Close  
End Sub
2行目、3行目【MsgBox “ブックを任意の場所に一旦保存して” & vbCrLf & _
“画像ファイルを書き出すパス(場所)を確定してください。”】

新規のブックの場合はブックのパス(場所)を特定したいため一旦ブックを保存してほしいことをメッセージで伝えます。


4行目【With Application.FileDialog(msoFileDialogSaveAs)】
FileDialog(ファイルダイアログ)オブジェクトを使用して、引数のtypeを名前を付けて保存ダイアログに指定しています。


5行目【.InitialFileName = ThisWorkbook.Path & “¥”】
with【ウィズ】ステートメントで指定したFileDialog【ファイルダイアログ】オブジェクトに対してInitialFileName【イニシャルファイルネーム】プロパティで保存ダイアログに初めに表示される保存パス(場所)を設定います。ThisWorkbookでこのブックの場所に設定します。


6行目【.FilterIndex = 2】
with【ウィズ】ステートメントで指定したFileDialog【ファイルダイアログ】オブジェクトに対してFilterIndex【ファイルインデクス】プロパティで、保存ダイアログに初めに表示されるファイル保存形式を2の「エクセル マクロ有効ブック(*xlsm)」に設定しています。


7行目【If .Show = -1 Then .Execute】
with【ウィズ】ステートメントで指定したFileDialog【ファイルダイアログ】オブジェクトに対してIf文(条件分岐)でShowメソッドが-1だったら、つまりダイアログのアクションボタンがクリックされたらExecute【エクスキュート】メソッドでアクションを実行するを定義します。


9行目【 With Range(“A1:D8”)】
A1セル~D8セルのセル範囲をWith【ウィズ】ステートメントで指定します。


10行目【.CopyPicture】
With【ウィズ】ステートメントで指定したセル範囲をCopyPicture【コピーピクチャー】メソッドを使用して画像としてコピーします。


11行目【ActiveSheet.ChartObjects.Add(0, 0, .Width, .Height).Name = “貼付用”】
埋め込みグラフを表すChartObjects【チャートオブジェクツ】オブジェクトのAdd【アド】メソッドを使用して、埋め込みグラフを作成します。

埋め込みグラフのサイズはWithステートメントで指定したセル範囲のRange【レンジ】オブジェクトのWidth【ワイズ】とHeight【ハイト】プロパティを使用して、指定したセル範囲の大きさに合わせます。

ChartObjects【チャートオブジェクツ】オブジェクトのName【ネーム】プロパティを使用して、追加した埋め込みグラフに「貼付用」と名前を付けます。


13行目【Application.OnTime Now + TimeValue(“00:00:01”), “書き出し”】
埋め込みグラフを作成直後に画像の貼り付けができない場合があるのでApplication【アプリケーション】オブジェクトのOnTime【オンタイム】メソッドを使用して埋め込みグラフを作成後1秒待ってから、8行目のPrivate Subプロシージャの画像の貼り付けを実行します。


14行目【End Sub】
End【エンド】ステートメントで「画像作成」Sub【サブ】プロシージャを終了します。


15行目【Private Sub 書き出し()】
「マクロ」ダイアログボックスに表示されないようにPrivate【プライベート】ステートメント利用してSubプロシージャを作成します。


16行目【With ActiveSheet.ChartObjects(“貼付用”)】
追加した埋め込みグラフをWith【ウィズ】ステートメントで指定します。


17行目【.Chart.Paste】
クリップボードに保管されているデータをグラフシートに貼り付けるChart【チャート】オブジェクトのPaste【ペースト】メソッドを使用して、With【ウィズ】ステートメントで指定した埋め込みグラフに貼り付けます。


18行目【.Chart.Export ThisWorkbook.Path & “¥画像.png”】
Chart【チャート】オブジェクトのExport【エクスポート】メソッドを使用して、With【ウィズ】ステートメントで指定した埋め込みグラフをPng形式の画像としてThisWorkbook.Path(このブックが保存されている場所)に書き出します。


19行目【.Delete】
With【ウィズ】ステートメントで指定した追加した埋め込みグラフをDelete【デリイト】メソッドを使用して削除します。


21行目【MsgBox ThisWorkbook.Path & “にpngファイルを出力しました。”】
MsgBox関数を使用して書き出しが終了したことをユーザーに伝えます。


22行目【Application.Quit】
ApplicationオブジェクトのQuit【クイット】メソッドで、Excelの終了予約をします。

このワークブック以外のワークブックが開いている場合は、そのワークブックも閉じられてしまうの気をつけてください。


23行目【Application.DisplayAlerts = False】
Application【アプリケーション】オブジェクトのDisplayAlerts(ディスプレイアラート)プロパティにFalseを設定して保存の確認ダイアログを非表示にします。


24行目【ThisWorkbook.Close 】
このワークブックをClose【クローズ】メソッドで閉じます。


以上で、セル範囲を画像オブジェクトにするCopyPictureメソッドと画像オブジェクトを画像形式で書き出す方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告