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 で取得する.このオブジェクトにもプロパティやメソッドはある.
Y 軸は .Axes(xlValue)
Y 軸は .Axes(xlValue) で取得する.軸そのものと文字に関わるオブジェクトが下に続く.
X 軸は .Axes(xlCategory)
X 軸は .Axes(xlCategory) で取得する.軸そのものと文字に関わるオブジェクトが下に続く.
凡例は .Legend
凡例は .Legend で取得する.塗りつぶしや外枠,文字に関するオブジェクトが下に続く.
凡例の 1 番目の系列は .Legend.LegendEntries(1), 2 番目の系列は .Legend.LegendEntries(2) で取得する.() 内の数字はインデックスである.
1 番目の系列は .FullSeriesCollection(1)
1 番目の系列は .FullSeriesCollection(1) で取得する.() 内の数字はインデックスである.
1 番目の系列の 3 番目の点は .FullSeriesCollection(1).Points(3)
1 番目の系列の 3 番目の点は .FullSeriesCollection(1).Points(3) で取得する.() 内の数字はインデックスである.
2 番目の系列は .FullSeriesCollection(2)
2 番目の系列は .FullSeriesCollection(2) で取得する.() 内の数字はインデックスである.
2 番目の系列の 1 番目の点は .FullSeriesCollection(2).Points(1)
2 番目の系列の 1 番目の点は .FullSeriesCollection(2).Points(1) で取得する.() 内の数字はインデックスである.
“VBAから見たEXCELの散布図” への4件の返信