LoginSignup
2
4

More than 5 years have passed since last update.

【メモ】グラフを次々にコピー → 参照範囲更新

Last updated at Posted at 2018-12-19

やったこと

大量にグラフを作るマクロを作りました。流れとしては、まずはひな形のグラフをひとつ手動で作ります。そして、それをアクティブにしてマクロを実行します。すると、自動で次々にグラフをコピーし、参照範囲を更新していきます。
作成されたグラフは、↓のように横方向に最大5個並べられ、下の段に続いて貼り付けられていきます。
■■■■■
■■■■■
■■■■■
■■
作成したグラフは、縦軸が標高で横軸が水温のグラフになっています。

Sub 鉛直グラフ作成()
'雛形のグラフを一つ作っておく。
'そのグラフをアクティブにしてマクロ実行
'必要数コピーして各系列の参照範囲を更新

N = Cells(1, 3).End(xlDown).Row - 2 'グラフの個数
flag = 1

Set orig_Chart = ActiveSheet.ChartObjects(1)
Set last_Chart = orig_Chart

For i = 2 To N

    Set dupli_Chart = last_Chart.Duplicate

    'flagによって配置位置調節
    With dupli_Chart
        If flag < 5 Then 'flagが5でなければ右に続けてはりつけ
            .Left = last_Chart.Left + last_Chart.Width
            .Top = last_Chart.Top
            flag = flag + 1

        Else 'flagが5だったら下にはりつけ
            .Left = orig_Chart.Left
            .Top = last_Chart.Top + last_Chart.Height
            flag = 1
        End If
    End With

    'グラフタイトルと系列更新する。※ここはデータに併せて修正する。
    'N+2行~がデータ。系列1が上流。系列2が下流
    '系列1・・・・・X(水温):15~26列、Y(標高):3~14列
    '系列2・・・・・X(水温):40~51列、Y(標高):28~39列
    With ActiveSheet.ChartObjects(i).Chart
    .ChartTitle.Text = "=" & ActiveSheet.Name & "!R" & (i + 2) & "C2"
    .SeriesCollection(1).XValues = Range(Cells(i + 2, 15), Cells(i + 2, 26))
    .SeriesCollection(1).Values = Range(Cells(i + 2, 3), Cells(i + 2, 14))
    .SeriesCollection(2).XValues = Range(Cells(i + 2, 40), Cells(i + 2, 51))
    .SeriesCollection(2).Values = Range(Cells(i + 2, 28), Cells(i + 2, 39))
    End With

    Set last_Chart = ActiveSheet.ChartObjects(i)

Next i
End Sub

↓やり直したいときに、ひな形以外のグラフを消す。

Sub 雛形以外のグラフを削除()
Dim N As Integer

N = ActiveSheet.ChartObjects.Count

Do
ActiveSheet.ChartObjects(N).Delete
N = N - 1
Loop Until N = 1

End Sub
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4