シートの選択範囲だけのキャプチャーが欲しい
Windowsにはいくつかの画面キャプチャー取得方法があります。
1. PrintScreenキー
全てのディスプレイのスクリーンショットがクリップボードに保存されます。
2. Windowsキー + Shift + S(Snipping Toolでの部分キャプチャーのショートカット)
Windows付属の画面キャプチャーツールのショートカット。画面が少し暗くなりカーソルが十字キーになるのでドラッグして撮りたい部分を選択するとクリップボードに保存されます。
3. Snipping Tool
Windows付属の画面キャプチャーツール。スタート → アプリ → Windowsアクセサリ → Snipping Tool。新規作成ボタン→範囲ドラッグするとクリップボードに保存されます。
4. Alt + PrintScreenキー
アクティブウィンドウだけをクリップボードに保存します。
ウィンドウのキャプチャーを撮りたい場合はこれらの方法で大体対応できます。
ただ、Excelのキャプチャーを撮る場合に、厳密にセルの罫線に合わせて撮る必要があったりします。
この記事では、Excelシートの選択範囲をスクリーンショットとしてクリップボードに保存する方法を紹介します。また、それを拡張してPNG画像として保存する方法も紹介します。セル範囲にオートシェイプなどの図がある場合はそれも画像として保存します。
リモートワークなどでTeamsなどに貼り付ける場合にも手っ取り早く使えます。
Excelの選択範囲をクリップボードに保存するコード
以下のコードを実行するとExcelの選択範囲をスクリーンショットとしてクリップボードに保存します。
選択範囲とは、セルの範囲選択だけでなく、オートシェイプを選択している場合も対象になります。
なお、Ctrlキーを使って選択範囲を複数にしている場合はエラーになります。それに対応するのが面倒なのとそういう使い方でキャプチャーを撮ることは無いと思いますので対応してません。
SaveSelectionAsClipBoard関数実行後はクリップボードに選択範囲が画像として保存されているため、Ctrl + Vで各種アプリケーション(Wordなど画像を扱えるアプリ)に張り付けることができます。
コードで何をやっているかはコメントの通りで、クリップボードに保存しているだけです。
1 2 3 4 |
Sub SaveSelectionAsClipBoard() '// 選択範囲を画像としてクリップボードに保存 Call Selection.CopyPicture(Appearance:=xlScreen, Format:=xlPicture) End Sub |
実行結果
1. 以下のようにシートに書いてあるとします。上のコードをそのまま貼ってます。
2. 保存したい範囲を選択します。ここではC2:E7を選択しています。
3. SaveSelectionAsClipBoard関数を実行します。特にメッセージなどは出ません。
4. 貼り付けたいアプリでCtrl + Vします。ここでは同じシートのB10セルに貼り付けています。画像として貼り付けられます。
セル範囲をクリップボード保存+PNG画像に保存するコード
以下のコードは上のコードを拡張して、Excelのセル範囲をスクリーンショットとしてクリップボードとPNG画像の両方で保存します。
上のコードと異なり、こちらは「セル選択範囲」限定にしてます。オートシェイプ選択時はエラーになります。
PNG画像はブックと同じフォルダにcapture.pngというファイル名で保存されます。既存の場合は上書きします。
クリップボードの内容を一時的にグラフにセットし、それをPNG画像として保存しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Sub SaveSelectionAsImage() Dim ws As Worksheet '// アクティブシート用のワークシート Dim r As Range '// 選択セル範囲 Dim ch As ChartObject '// クリップボードの一時保存先のグラフ Dim imgPath As String '// キャプチャーしたPNGファイル保存先フルパス '// アクティブシートの選択セル範囲を取得 Set ws = ActiveSheet Set r = Selection '// ブックと同じフォルダにPNGファイルのパスを指定する imgPath = ThisWorkbook.Path & "\capture.png" '// 選択セル範囲を画像としてコピー Call r.CopyPicture(Appearance:=xlScreen, Format:=xlPicture) '// グラフのサイズを選択セル範囲と同じサイズに設定 Set ch = ws.ChartObjects.Add(Left:=r.Left, Top:=r.Top, Width:=r.Width, Height:=r.Height) '// グラフをアクティブにすることで貼り付け先を指定する ch.Activate '// クリップボードの内容をグラフに貼り付け ch.Chart.Paste '// PNGファイルをブックと同じフォルダに保存 Call ch.Chart.Export(Filename:=imgPath, FilterName:="PNG") '// グラフ削除 ch.Delete MsgBox "保存しました:" & imgPath End Sub |