EXCEL のグラフの階層構造は複雑である.中でもデータ系列は基本でありながらおろそかにされがちである.今回は VBA の視点からグラフのデータ系列を見てみたい.
オブジェクトブラウザーは EXCEL VBA の羅針盤
EXCEL の通常操作画面(ユーザーインターフェース)からは想像もつかないが,EXCEL にはプログラミング言語という「裏の顔」がある.普段操作している EXCEL の要素はほぼ全てオブジェクトとして定義されており,複雑な階層構造をなしている.オブジェクトブラウザーはその羅針盤となる.
Alt キーと F11 キーを同時に押すと VBE という開発環境が起動する.さらに F2 キーを押すとオブジェクトブラウザーが開く.

データ系列 = Series オブジェクト
最初に答えを書いておくと,グラフのデータ系列は VBA の Series オブジェクトにあたる.
検索ウィンドウに series とタイプ入力してリターンすると,上段にずらずらと検索結果が並ぶ.

ウィンドウを最大化する.中程のクラス Series をクリックすると下段左側のペインに該当クラスが選択された状態になるので,そこをクリックすると,メンバーが下段右側に表示される.

11 個のメソッドと 51 個のプロパティが表示されている.

必要なプロパティとメソッドは四つだけ
この数だけで圧倒されそうになるが,実際に必要なものは少ない.というか,四つだけである.すなわち三つのプロパティ (.Name, .Values, .XValues), 一つのメソッド (.Points) である.
メソッドとかプロパティとか分からないと思うが,今はそういうものだと思って流してほしい.
.Name は系列名, .Values は Y の値の集合, .XValues は X の値の集合を指す.
点 = Point オブジェクト
Point オブジェクトとはグラフ上に描かれた一個一個の点のことである.プロパティは 28 個,メソッドは 9 個あるが,重要なプロパティは .MarkerStyle, .MarkerSize, .MarkerBackgroundColor, .MarkerForegroundColor あたりであろうか.

系列ひと塊の点の集合は Points コレクションで表現するが,こちらは 4 個のプロパティと 1 個のメソッドがあるに過ぎず,主に Item メソッド経由で 1 個の Point オブジェクトを特定する目的で使われる.

.Item メソッド = コレクション
あまり VBA 関連のサイトに書かれていないことであるが,メンバーに .Item メソッドを持つオブジェクトはコレクションであり,オブジェクト名が複数形になっている.たいてい .Count プロパティもセットでついており,コレクション最後のオブジェクトを次のような形で特定できる.
With Objects .Item(.Count).Select End with
コレクションとは同種のオブジェクトの集合のことである.Charts, ChartObjects, FullSeriesCollection, SeriesCollection, ListObjects, Points あたりが散布図に関連するコレクションである.
FullSeriesCollection は Series のコレクション
ついでに FullSeriesCollection にも触れておく.散布図のマクロ記録によると,データ系列のオブジェクトは FullSeriesCollection で取得される.これはコレクションであり,一つの系列は .Item メソッドにより特定できる.

FullSeriesCollection の親オブジェクトは Chart オブジェクトである.

SeriesCollection も Series のコレクション
SeriesCollection もまた散布図のデータ系列のコレクションである.一つの系列は .Item メソッドにより特定できる.

SeiresCollection の親オブジェクトは Chart オブジェクトである.

もう少し突っ込んでおくと,.Item メソッドの引数(カッコ内の数字)はインデックスであり,1 から順番に加算していってループを作ることができる.次のテストコードではイミディエイトウィンドウにデータ系列の名前を順に出力する.
With Worksheets(1).ChartObjects(1).Chart For i = 1 to .SeriesCollection.Item(.Count) Debug.Print .SeriesCollection.Item(i).Name Next i End with
FullSeriesCollection と SeriesCollection, どう使い分ける?
公式には FullSeriesCollection は「グラフの Seires オブジェクトの完全なセット」とのことで,「フィルターで除外した Series オブジェクトを取得したり再除外したりできる」そうである.
SeriesCollection は「指定されたグラフまたはグラフ種類グループにあるすべての Series オブジェクトのコレクション」だそうである.
どうにもよく分からないが,フィルターに関連したデータを扱う必要がある場合は FullSeriesCollection にしておいた方が無難であろう.
データ系列を増やしていくなら SeriesCollection 一択
その後の実験で,VBA でデータ系列を動的に追加していく際には SeriesCollection がふさわしいと思われた..NewSeries メソッドを使う.

多数のデータ系列をループ内で増やしたい場合がそれに当たる.サンプルコードを載せておこう.
Sub myDateSeries() Dim myXValue() As Double Dim myValue() As Long Dim myName As String Dim myCht As Chart Dim mySeries As Series Dim mySht As Worksheet Set mySht = ActiveSheet Set myCht = mySht.ChartObjects(1).Chart ReDim myXValue(2) ReDim myValue(2) myXValue(0) = 0.2 myXValue(1) = 0.5 myXValue(2) = 0.7 myValue(0) = 3 myValue(1) = 5 myValue(2) = 7 Set mySeries = myCht.SeriesCollection.NewSeries With mySeries .Name = "SERIES1" .XValues = myXValue .Values = myValue End With End Sub
“VBAから見るEXCELのグラフのデータ系列” への2件の返信