プチIT化 PR

シート内にあるグラフすべてを画像として別シートにコピーするマクロ

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは、わたあめです。今回の記事は、Excelマクロでグラフのみを画像として別シートにコピーするサンプルマクロを紹介していきます。

具体的には、シートの中に複数グラフがあり、グラフだけの別シートにまとめたい場合です。

BEFORE・AFTERイメージは上画像の通りです。表とグラフがあるシートから、グラフの部分だけ画像としてコピーするサンプルマクロを紹介していきます。それでは、いってみましょう!

グラフを画像として別シートにコピーするマクロ

早速サンプルマクロを紹介します。(内容については後章で解説します。)Sheet1にあるすべてのグラフを、Sheet2にコピーするサンプルマクロです。

Sub copyAllGraph()

' 変数定義
Dim gObj
Dim cNum, cCell, rCell As Integer
Dim pColumn, pRow As Integer
Dim objCount As Integer

' グラフの配置決め
cNum = 3 ' 1段にグラフを何個並べるか
cCell = 7 ' グラフ貼付の列移動数(グラフの横幅に合わせてセル数を指定、セル何個間隔で配置するか)
rCell = 12 ' グラフ貼付の行移動数(グラフの縦幅に合わせてセル数を指定、セル何個間隔で配置するか)
pCoumn = 1 ' グラフ列貼付開始位置
pRow = 1 ' グラフ行貼付開始位置
objCount = 1 ' グラフオブジェクトのカウント用

' 全てのグラフを画像として貼付する
For Each gObj In Worksheets("Sheet1").ChartObjects

  gObj.CopyPicture ' グラフを画像でコピー

  ' グラフを貼り付け
  Worksheets("Sheet2").Activate
  ActiveSheet.Cells(1, 1).Select
  With ActiveSheet
    .Cells(pRow, pColumn).Select
    .Paste ' 貼り付け
  End With

  ' グラフが指定の個数並んだら
  If objCount Mod cNum = 0 Then
    pRow = pRow + rCell
    pColumn = 1
  Else
    pColumn = pColumn + cCell
  End If

  ' オブジェクトカウントアップ
  objCount = objCount + 1

Next

End Sub

Sheet1のグラフをSheet2のセルA1を起点に、セル7列ごと移動しながら、画像として貼り付けています。また、横にグラフが3個並んだら次の段(セル12行分移動)へ移動するという作りになっています。

この動きを調整するには、後章の調整方法を参照してください。

「グラフの配置決め」の値を調整する

グラフの配置位置はサンプルマクロ内の「グラフの位置決め」のまとまりの部分で設定します。

「cNum」・「cCell」・「rCell」・「pColumn」・「pRow」の変数の値を設定することで、貼り付け位置を調整することが出来ます。各変数について、説明していきます。

cNum

グラフを横に何個並べるかを指定します。「cNum=3」だと3個のグラフが横並びに、「cNum=5」を指定すると5個のグラフが横並びになります。指定した個数分が1段に埋まると次の1段に移動します。

cCell

1つ目のグラフ貼り付け後、横に何セル移動してから貼り付け始めるかを指定する変数です。cCellの値を大きくすればするほど、グラフとグラフの横間隔が広まります。グラフの横幅より大きなセル数を指定しないとグラフが重なってしまうので注意です。

rCell

cNumで指定した個数分のグラフが貼り付け終わったら、次の段へ移動する造りとなっています。その下側への移動セル数を指定します。

rCellの値を大きくすればするほど、グラフとグラフの横間隔が広まります。グラフの縦幅より大きなセル数を指定しないとグラフが重なってしまうので注意です。

pCoumn, pRow

最初のひとつ目のグラフの貼り付け開始位置を指定する変数です。pColumnは列、pRowは行となります。

例えば、セルB2から始めたい場合は、2列目・2行目となるので、pColumn=2・pRow=2を指定します。セルC5から始めたい場合は、3列目・5行目となるので、pColumn=3・pRow=5を指定します。

グラフの貼り付け順序を変えたい場合

このサンプルマクロを動かすと、グラフのChartObjectsのIndex番号「1」から順に処理が行われます。

インデックス番号1のグラフコピー、インデックス番号2のグラフコピー・・・と言った具合に処理が進んでいきますが、貼り付け順序を変更したい場合は、グラフのインデックス番号を変更すれば良いです。

グラフのChartObjectsのIndex番号の変更の仕方は別記事にまとめていますので、興味ある方は読んでみてくださいね。

【ChartObjects】グラフのインデックス番号の確認・変更方法こんにちは、わたあめです。今回の記事はExcelマクロのChartObjectsのインデックス番号についてです。 VBAマクロでグ...

さいごに

いかがだったでしょうか。マクロ作りの参考になれば幸いです。それでは、また次の記事で!