VBAから見たEXCELの散布図

 EXCEL のグラフはオブジェクトの関係が分かりにくい.特に散布図はよく使うものであるだけに,それを把握しておくことが必要である.

散布図をコードから生成

 下記のコードはワークシートに埋め込みグラフを作成し,大きさを 400 x 400 とし,マーカーなし散布図に変更している.

Sub NewChart()

Dim Sh  As Worksheet
Dim ChtObj As ChartObjects
Dim Cht As Chart

Set Sh = ActiveSheet
Set ChtObj = Sh.ChartObjects
Set Cht = ChtObj.Add(0, 0, 400, 400).Chart

With Cht
'    .Name = "test"
    .SetSourceData Sh.Range("A1:B3")
    .ChartType = xlXYScatterLinesNoMarkers
    Debug.Print .Name
End With

End Sub

各要素を選択したコード

 さらに下記コードでは作成した散布図の各要素をクリックしてたどったマクロ記録を編集したものである.凡例の各系列と目盛線の図がないが勘弁してほしい.

Sub Macro1()

Dim Sh As Worksheet
Dim Cht As Chart

Set Sh = ActiveSheet
Set Cht = Sh.ChartObjects("グラフ 1").Chart

With Cht
    .PlotArea.Select
    .Axes(xlValue).Select
    .Axes(xlCategory).Select
    .Legend.Select
    .Legend.LegendEntries(1).Select
    .Legend.LegendEntries(2).Select
    .FullSeriesCollection(1).Select
    .FullSeriesCollection(1).Points(3).Select
    .FullSeriesCollection(2).Select
    .FullSeriesCollection(2).Points(1).Select
    .Axes(xlValue).MajorGridlines.Select
    .ChartArea.Select
End With
End Sub

Worksheet.ChartObjects().Chart でグラフの要素を取得

 7 行目にあるように, Worksheet の直下に ChartObjects() があり,その直下に Chart がある.これはお作法なので覚えるしかない.

プロットエリアは .PlotArea

 プロットエリアは .PlotArea で取得する.このオブジェクトにもプロパティやメソッドはある.

プロットエリアは.PltAreaで取得
プロットエリアは.PlotAreaで取得

Y 軸は .Axes(xlValue)

 Y 軸は .Axes(xlValue) で取得する.軸そのものと文字に関わるオブジェクトが下に続く.

Y軸は.Axes(xlValue)で取得
Y軸は.Axes(xlValue)で取得

X 軸は .Axes(xlCategory)

 X 軸は .Axes(xlCategory) で取得する.軸そのものと文字に関わるオブジェクトが下に続く.

X軸は.Axes(xlXValue)で取得
X軸は.Axes(xlXCategory)で取得

凡例は .Legend

 凡例は .Legend で取得する.塗りつぶしや外枠,文字に関するオブジェクトが下に続く.

凡例は.Legendで取得
凡例は.Legendで取得

 凡例の 1 番目の系列は .Legend.LegendEntries(1), 2 番目の系列は .Legend.LegendEntries(2) で取得する.() 内の数字はインデックスである.

1 番目の系列は .FullSeriesCollection(1)

 1 番目の系列は .FullSeriesCollection(1) で取得する.() 内の数字はインデックスである.

1番目の系列は.FullSeriesCollection(1)で取得
1番目の系列は.FullSeriesCollection(1)で取得

1 番目の系列の 3 番目の点は .FullSeriesCollection(1).Points(3)

 1 番目の系列の 3 番目の点は .FullSeriesCollection(1).Points(3) で取得する.() 内の数字はインデックスである.

1 番目の系列の 3 番目の点は .FullSeriesCollection(1).Points(3) で取得
1 番目の系列の 3 番目の点は .FullSeriesCollection(1).Points(3) で取得

2 番目の系列は .FullSeriesCollection(2)

 2 番目の系列は .FullSeriesCollection(2) で取得する.() 内の数字はインデックスである.

2 番目の系列は .FullSeriesCollection(2) で取得
2 番目の系列は .FullSeriesCollection(2) で取得

2 番目の系列の 1 番目の点は  .FullSeriesCollection(2).Points(1)

 2 番目の系列の 1 番目の点は  .FullSeriesCollection(2).Points(1) で取得する.() 内の数字はインデックスである.

2 番目の系列の 1 番目の点は  .FullSeriesCollection(2).Points(1) で取得
2 番目の系列の 1 番目の点は  .FullSeriesCollection(2).Points(1) で取得

“VBAから見たEXCELの散布図” への4件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください